Skip to content

Instantly share code, notes, and snippets.

@Rooster212
Created January 29, 2020 09:56
Show Gist options
  • Save Rooster212/95de2569ca4cd99be892b9b458efbf4b to your computer and use it in GitHub Desktop.
Save Rooster212/95de2569ca4cd99be892b9b458efbf4b to your computer and use it in GitHub Desktop.
Peters Petrol pumps. One of my first Python projects. I'll upload this to a proper repo with running instructions at some point.
# Jamie Roos | Peter's Petrol Pump's | Required - petrolpump.png in parent directory for window icon
import sys
from PyQt4 import QtGui,QtCore
class Pump(QtGui.QDialog):
def __init__(self,parent = None):
# private variables
self.amountToPay = 0.0
self.numLitres = 0.0
self.pricePerLitre = (1.199) # write price in pounds - program converts into pence for display
self.inUse = False
self.pumping = False
# gui stuff
QtGui.QMainWindow.__init__(self)
self.resize(400,320)
self.move(270,50)
self.grid = QtGui.QGridLayout()
self.setWindowIcon(QtGui.QIcon('petrolpump.png'))
self.counter = 0
self.timer = QtCore.QTimer()
# --------------------------------------------
self.priceDisplay = QtGui.QLCDNumber(6,self)
self.totalDisplay = QtGui.QLCDNumber(6,self)
self.litreDisplay = QtGui.QLCDNumber(6,self)
self.priceLabel = QtGui.QLabel("Price Per Litre (p)")
self.totalLabel = QtGui.QLabel("Total Price")
self.litreLabel = QtGui.QLabel("No. of Litres")
self.removePumpButton = QtGui.QPushButton("Remove Pump")
self.replacePumpButton = QtGui.QPushButton("Replace Pump")
self.pumpButton = QtGui.QPushButton("Pump Petrol")
self.setWindowTitle("Peter's Petrol Pumps")
self.stopPumpButton = QtGui.QPushButton("Stop Pump")
# --------------------------------------------
self.grid.addWidget(self.priceDisplay,1,2)
self.grid.addWidget(self.priceLabel,1,1)
self.grid.addWidget(self.totalDisplay,2,2)
self.grid.addWidget(self.totalLabel,2,1)
self.grid.addWidget(self.litreDisplay,3,2)
self.grid.addWidget(self.litreLabel,3,1)
self.grid.addWidget(self.removePumpButton,4,1)
self.grid.addWidget(self.replacePumpButton,5,1)
self.grid.addWidget(self.pumpButton,4,2)
self.grid.addWidget(self.stopPumpButton,5,2)
# --------------------------------------------
self.setLayout(self.grid)
self.connect(self.removePumpButton,QtCore.SIGNAL("clicked()"),self.setInUse)
self.connect(self.replacePumpButton,QtCore.SIGNAL("clicked()"),self.setNotInUse)
self.connect(self.pumpButton,QtCore.SIGNAL("clicked()"),self.fillUp)
self.connect(self.stopPumpButton,QtCore.SIGNAL("clicked()"),self.stopFillUp)
QtCore.QObject.connect(self.timer,QtCore.SIGNAL("timeout()"),self.fillUp)
# --------------------------------------------
self.priceDisplay.display(str(self.pricePerLitre*100))
self.replacePumpButton.setEnabled(False)
self.pumpButton.setEnabled(False)
self.stopPumpButton.setEnabled(False)
# public functions go here
def getAmount(self):
return self.amountToPay
def getNumLitres(self):
return self.numLitres
def getPricePerLitre(self):
return self.pricePerLitre
def stopFillUp(self):
self.timer.stop()
self.pumping = False
self.pumpButton.setEnabled(True)
self.stopPumpButton.setEnabled(False)
self.replacePumpButton.setEnabled(True)
def fillUp(self):
if self.inUse == True:
self.pumpButton.setEnabled(False)
self.stopPumpButton.setEnabled(True)
self.replacePumpButton.setEnabled(False)
self.pumping = True
self.timer.start(106)
self.amountToPay = self.numLitres * self.pricePerLitre
self.amountToPay = round(self.amountToPay,2)
self.numLitres = self.numLitres + 0.1
if self.numLitres >= 99.9:
self.stopFillUp()
self.inUse = False
if str(self.amountToPay)[-2]==".":
self.amountToPay = str(self.amountToPay)+"0"
self.totalDisplay.display(str(self.amountToPay))
self.litreDisplay.display(str(self.numLitres))
main2.Update()
def reset(self):
self.amountToPay = 0.0
self.numLitres = 0.0
self.totalDisplay.display(str(self.amountToPay))
self.litreDisplay.display(str(self.numLitres))
self.removePumpButton.setEnabled(True)
def getInUse(self):
return self.inUse
def setInUse(self):
self.inUse = True
main2.status.setText("PUMP IN USE")
self.pumpButton.setEnabled(True)
self.removePumpButton.setEnabled(False)
self.replacePumpButton.setEnabled(True)
main2.deactivateButtons()
def setNotInUse(self):
if self.pumping == False:
self.inUse = False
main2.status.setText("PUMP NOT IN USE")
self.removePumpButton.setEnabled(True)
self.replacePumpButton.setEnabled(False)
self.stopPumpButton.setEnabled(False)
self.pumpButton.setEnabled(False)
main2.reactivateButtons()
def Update(self,ppl):
self.pricePerLitre = ppl
self.priceDisplay.display(str(self.pricePerLitre*100))
class Console(QtGui.QDialog):
def __init__(self,parent = None):
QtGui.QMainWindow.__init__(self)
self.resize(200,320)
self.move(50,50)
self.grid = QtGui.QGridLayout()
self.setWindowIcon(QtGui.QIcon('petrolpump.png'))
self.totalPrice = 0.0
self.totalLitres = 0.0
self.totalPriceDay = 0.0
self.totalLitreDay = 0.0
self.setWindowTitle("Peter's Petrol Pumps Console")
self.PricePerLitre = main.getPricePerLitre()
self.priceDisplay = QtGui.QLCDNumber(6,self)
self.totalDisplay = QtGui.QLCDNumber(6,self)
self.litreDisplay = QtGui.QLCDNumber(6,self)
self.totalDayPriceDisplay = QtGui.QLCDNumber(6,self)
self.totalDayLitreDisplay = QtGui.QLCDNumber(6,self)
self.changePriceBox = QtGui.QLineEdit("Enter in POUNDS")
self.changePriceButton = QtGui.QPushButton("Change Price")
self.resetButton = QtGui.QPushButton("Reset Pump")
self.priceLabel = QtGui.QLabel("Price Per Litre (p)")
self.totalLabel = QtGui.QLabel("Last Pump Price")
self.litreLabel = QtGui.QLabel("No. of Litres Last Pump")
self.totalDayLabel = QtGui.QLabel("Total Net Income Day")
self.totalLitreLabel = QtGui.QLabel("Total Litres Sold Day")
self.status = QtGui.QLabel("PUMP NOT IN USE")
# --------------------------------------------
self.grid.addWidget(self.priceDisplay,1,2)
self.grid.addWidget(self.priceLabel,1,1)
self.grid.addWidget(self.changePriceBox,2,1)
self.grid.addWidget(self.changePriceButton,2,2)
self.grid.addWidget(self.totalDisplay,3,2)
self.grid.addWidget(self.totalLabel,3,1)
self.grid.addWidget(self.litreDisplay,4,2)
self.grid.addWidget(self.litreLabel,4,1)
self.grid.addWidget(self.resetButton,5,2)
self.grid.addWidget(self.status,5,1)
self.grid.addWidget(self.totalDayLabel,6,1)
self.grid.addWidget(self.totalLitreLabel,7,1)
self.grid.addWidget(self.totalDayPriceDisplay,6,2)
self.grid.addWidget(self.totalDayLitreDisplay,7,2)
self.setLayout(self.grid)
# --------------------------------------------
self.connect(self.changePriceButton,QtCore.SIGNAL("clicked()"),self.changePrice)
self.connect(self.resetButton,QtCore.SIGNAL("clicked()"),self.resetPump)
self.priceDisplay.display(str(self.PricePerLitre*100))
def Update(self):
self.totalPrice = main.amountToPay
self.totalDisplay.display(str(self.totalPrice))
self.totalLitres = main.numLitres
self.litreDisplay.display(str(self.totalLitres))
if main.inUse:
self.status.setText("PUMP IN USE")
def deactivateButtons(self):
self.changePriceButton.setEnabled(False)
self.resetButton.setEnabled(False)
def reactivateButtons(self):
if main.numLitres == 0.0:
self.changePriceButton.setEnabled(True)
self.resetButton.setEnabled(True)
def changePrice(self):
self.PricePerLitre = eval(self.changePriceBox.text())
self.priceDisplay.display(str(self.PricePerLitre*100))
main.Update(self.PricePerLitre)
def resetPump(self):
if main.inUse == False and main.pumping == False and (main.amountToPay and main.numLitres) != 0.0:
self.totalPrice = main.amountToPay
self.totalDisplay.display(self.totalPrice)
self.totalLitres = main.numLitres
self.litreDisplay.display(self.totalLitres)
main.reset()
self.totalPriceDay = self.totalPriceDay + float(self.totalPrice)
self.totalLitreDay = self.totalLitreDay + float(self.totalLitres)
self.totalDayPriceDisplay.display(str(self.totalPriceDay))
self.totalDayLitreDisplay.display(str(self.totalLitreDay))
self.changePriceButton.setEnabled(True)
class infoWindow(QtGui.QDialog):
def __init__(self,parent = None):
QtGui.QMainWindow.__init__(self)
self.resize(620,100)
self.move(50,404)
self.grid = QtGui.QGridLayout()
self.setWindowIcon(QtGui.QIcon('petrolpump.png'))
self.setWindowTitle("Info")
self.quitButton = QtGui.QPushButton("Quit")
self.quitLabel = QtGui.QLabel("Quit button shuts down whole system!")
self.infoBox = QtGui.QLabel("Peter's Petrol Pumps is a simulation of a petrol pump system, featuring one petrol pump.")
self.authorTag = QtGui.QLabel("Created by Jamie Roos.")
self.grid.addWidget(self.quitButton,3,2)
self.grid.addWidget(self.quitLabel,3,1)
self.grid.addWidget(self.infoBox,1,1)
self.grid.addWidget(self.authorTag,2,1)
self.setLayout(self.grid)
self.connect(self.quitButton,QtCore.SIGNAL("clicked()"),self.quitProg)
def quitProg(self):
sys.exit()
app = QtGui.QApplication(sys.argv)
# create all the forms here
main = Pump()
main2 = Console()
infoObject = infoWindow()
main.show()
main2.show()
infoObject.show()
# the next line means wait for something to happen
app.exec_()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment