Проєкт "Піцерія"
Розробити форму замовлення піци з різними начинками та різних розмірів:
import sys from PyQt4 import QtCore, QtGui, uic form_class = uic.loadUiType("hello_form.ui")[0] class MyWindowClass(QtGui.QMainWindow, form_class): def __init__(self, parent=None): QtGui.QMainWindow.__init__(self, parent) self.setupUi(self) self.pushButton.clicked.connect(self.pushButton_clicked) # подія клацання кнопки прив'язується до методу def pushButton_clicked(self): # метод опису дій при клацанні кнопки price=20 # базова вартість піци # обчислення вартості піци self.label.setText(str(price)) # записуємо вартість піци у напис app = QtGui.QApplication(sys.argv) myWindow = MyWindowClass(None) myWindow.show() app.exec_()
Вартість піци обчислюється за принципом: основа коштує 20 гривень, кожна начинка додає до вартості певну суму, якщо цю начинку позначено:
if self.checkBox.isChecked(): price+=15
Залежно від обраного розміру піци регулюється остаточна вартість
if self.radioButton.isChecked(): price*=0.75
Доповнення 1
Додано можливість обирати кількість додаткових начинок: на початку проекту віконечка з кількістю є невидимі (але присутні на формі); якщо прапорець позначено, то віконечко з кількістю стає видимим. Це означає, що потрібно створити подію клацання прапорця checkBox_2.clicked.connect:
self.spinBox.hide() # приховання віконечка з кількістю self.checkBox_2.clicked.connect(self.checkBox_2_clicked) # створення події клацання прапорця def checkBox_2_clicked(self): # обробка події клацання прапорця self.spinBox.show() # показ віконечка з кількістю
Доповнення 2
Додамо компонент timeEdit - для виведення часу, до якого потрібно доставити замовлення. Наступний код потрібно дописати в кінці роботи функції pushButton_clicked.
global delivery this_moment = QtCore.QTime.currentTime() # поточний час delivery=this_moment.addSecs(60*30) # час доставки self.timeEdit.setTime(delivery) # виведення часу доставки в timeEdit
Для того, щоб постійно перевіряти, скільки часу залишилось, потрібно створити вбудований таймер, який кожні 1000 мілісекунд оновлюватиме інформацію в написі. Наступний код потрібно дописати на початку роботи функції pushButton_clicked
self.timer = QtCore.QTimer(self) # створення таймера self.timer.timeout.connect(self.tick) # подія спрацювання таймера self.timer.start(1000) # затримка таймера
При спрацювання таймера необхідно порівняти годину, зафіксовану на початку роботи програми (delivery) та новий поточний час (this_moment). Створіть нову функцію def tick(self) в класі MyWindowClass, та опишіть роботу події спрацювання таймера.
global delivery this_moment = QtCore.QTime.currentTime() # новий поточний час left=this_moment.secsTo(delivery) # різниця часу (в секундах) між delivery та this_moment
Залишається перевести отриману кількість секунд в хвилини та секунди (шляхом ділення на 60) та вивести отримані значення, наприклад у текстове поле
self.label.setText(str(left))