Розробити форму замовлення піци з різними начинками та різних розмірів:


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))
Остання зміна: Середа 22 березня 2017 04:47 AM