Qt5 Python GUI 编程指南
创建时间:2018-12-10  访问量:7245  8  0

Qt5 Python GUI 编程指南

显示两组CheckBox

在这个应用程序中,我们将学习创建两组复选框。用户可以从任意组中选择任意数量的复选框,将出现相应地结果。

准备

我们将尝试展示餐厅的菜单,供应不同类型的冰淇淋和饮料。 我们将创建两组复选框,一组是冰淇淋,另一组是饮料。 冰淇淋组显示四个复选框,显示四种不同类型的冰淇淋,薄荷巧克力片,饼干面团等,以及它们的价格。 饮料组显示三个复选框,咖啡,苏打水等,以及它们的价格。 用户可以从任一组中选择任意数量的复选框。 当用户选择任何冰淇淋或饮料时,将显示所选冰淇淋和饮料的总价。

如何去做...

以下是创建应用程序的步骤,解释了如何将复选框安排到不同的组中,以及当来自任何组的任何复选框的状态发生变化时,如何采取相应的行动:

  1. 基于 Dialog without Buttons 模板新建一个应用程序。

  2. 拖动 4 个 Label 部件,7 个 Check Box 部件和 2 个 Group Box 组件放到窗体上。

  3. 将前 3 个 Label 部件的 text 属性分别设置为 Menu, Select your IceCream 和 Select your drink。

  4. 删除第 4 个 Label 部件的 text 属性,因为我们将通过代码来在其上显示选中的冰淇淋和饮料的总数量。

  5. 通过 Property Editor,增加应用中所有部件的字体大小以增加可见性。

  6. 分别设置前 4 个复选框的 text 属性为Mint Choclate Chips $4, Cookie Dough $2,Choclate Almond $3 和 Rocky Road $5。将这 4 个复选框放到第一个组的框中。

  7. 分别将后面 3 个复选框的 text 属性设置为 Coffee $2,Soda $3 和 Tea $1。将这三个复选框放到第二个组的框中。

  8. 将前面 4 个复选框的对像名称分别改成 checkBoxChoclateChips,checkBoxCookieDough,checkBoxChoclateAlmond 和 checkBoxRockyRoad。

  9. 将第一个group box的 objectName属性设置为 groupBoxIceCreams。

  10. 将后面三个复选框的 objectName 属性分别设置为 checkBoxCoffee, checkBoxSoda 和 checkBoxTea。

  11. 将第二个 group box 的 objectName 属性设置为groupBoxDrinks。

  12. 将第四个 Label 部件的 objectName 属性设置为 labelAmount。

  13. 将应用保存为 demoCheckBox2.ui。它通过 Label 部件显示冰淇淋和饮料的总数量,如下截图所示:

要将这个 .ui(XML)文件通过pyuic5命令集转换成 Python 代码。你可以在本书附带源代码文件中找到这个生成的名为demoCheckbox2.py 的 Python 代码文件。

  1. 在程序中以头文件的形式导入 demoCheckBox2.py 文件,以调用用户界面设计,并编写代码,当用户选中或取消选中的复选框时,并通过 Label 部件显示计算冰淇淋和饮料的总成本。

  2. 我们将程序命名为 callCheckBox2.pyw;代码如下所示:

import sys
from PyQt5.QtWidgets import QDialog
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
from demoCheckBox2 import *
class MyForm(QDialog):
    def __init__(self):
        super().__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.checkBoxChoclateAlmond.stateChanged.connect(self.dispAmount)
        self.ui.checkBoxChoclateChips.stateChanged.connect(self.dispAmount)
        self.ui.checkBoxCookieDough.stateChanged.connect(self.dispAmount)
        self.ui.checkBoxRockyRoad.stateChanged.connect(self.dispAmount)
        self.ui.checkBoxCoffee.stateChanged.connect(self.dispAmount)
        self.ui.checkBoxSoda.stateChanged.connect(self.dispAmount)
        self.ui.checkBoxTea.stateChanged.connect(self.dispAmount)
        self.show()
    def dispAmount(self):
        amount=0
        if self.ui.checkBoxChoclateAlmond.isChecked()==True:
        	amount=amount+3
        if self.ui.checkBoxChoclateChips.isChecked()==True:
        	amount=amount+4
        if self.ui.checkBoxCookieDough.isChecked()==True:
        	amount=amount+2
        if self.ui.checkBoxRockyRoad.isChecked()==True:
        	amount=amount+5
        if self.ui.checkBoxCoffee.isChecked()==True:
        	amount=amount+2
        if self.ui.checkBoxSoda.isChecked()==True:
        	amount=amount+3
        if self.ui.checkBoxTea.isChecked()==True:
        	amount=amount+1
        self.ui.labelAmount.setText("Total amount is $"+str(amount))
if __name__=="__main__":
    app = QApplication(sys.argv)
    w = MyForm()
    w.show()
    sys.exit(app.exec_())

它是如何工作的...

所有复选框的 stateChanged() 事件都是连接到 dispAmount 函数,该函数将计算所选冰淇淋和饮料的成本。在disamount 函数中,检查复选框的状态,以确定它们是选中的还是未选中的。选中复选框的冰淇淋和饮料的成本被添加并存储在 amount 变量中。最后,通过 labelAmount 部件显示存储在 amount 变量中添加的金额。在运行应用程序时,会出现一个对话框,提示您选择要订购的冰淇淋或饮料。在选择冰淇淋或饮料时,会显示所选物品的总量,如下图所示: