Qt5 Python GUI 编程指南
创建时间:2018-12-10  访问量:9403  9  1

Qt5 Python GUI 编程指南

以CheckBox形式显示选项

在创建应用程序时,您可能会遇到需要提供多个选项供用户选择的情况。 也就是说,您希望用户从一组选项中选择一个或多个选项。 在这种情况下,您需要使用复选框。 我们来了解更多关于复选框的信息。

开始

单选按钮只允许在组中选择一个选项,而复选框允许您选择多个选项。也就是说,选择一个复选框不会影响应用程序中的其他复选框。复选框以文本标签作为 QCheckBox 类的实例显示。复选框可以处于三种状态中的任何一种:选中(checked)、未选中(unchecked)或第三态(unchanged)。三态是不改变的状态;用户既没有选中该复选框,也没有选中该复选框。

方法应用

以下是QCheckBox类提供的方法:

  1. isChecked():如果复选框被选中,该方法返回布尔值true,否则返回false。

  2. setTristate():如果不希望用户更改复选框的状态,则将布尔值true传递给此方法。用户将无法选中或取消选中该复选框。

  3. setIcon():此方法用于显示带有复选框的图标。

  4. setText():此方法将文本分配给复选框。若要为复选框指定快捷键,请在文本中首选字符前面加上&号。快捷字符将显示为下划线。

  5. setChecked():为了使复选框在默认情况下显示为选中,请将布尔值true传递给此方法。

信号描述

QCheckBox发出的信号如下:

  1. clicked():当复选框被激活(即按下并释放)或按下其快捷键时,将发出此信号

  2. stateChanged():当复选框将其状态从选中更改为未选中时,就会发出此信号,反之亦然

要了解Check Box小部件,我们假设您经营的餐馆出售多种食品,如比萨饼。 比萨饼与不同的配料一起出售,例如额外的奶酪,额外的橄榄等等,每个馅料的价格也随之提到。 用户可以选择具有一个或多个浇头的普通比萨饼。 您想要的是,当选择浇头配料时,会显示披萨的总价格,包括所选的浇头配料。

如何去做...

本节的重点是了解当复选框的状态从选中变为未选中或反过来时如何动作。下面是创建这样一个应用程序的步骤:

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

  2. 拖动三个 Label 部件和三个 Check Box 部件放到窗体上。

  3. 将前两个 Label 部件的 text 属性分别设置为 Regular Pizza $10 和 Select your extra toppings。

  4. 在 Property Editor 窗口中,增加应用所有部件包含三个标签和复选框的字体大小,以增加可见性。

  5. 将复选框的 text 属性分别设置为 Extra Cheese $1,Extra Olives $1和Extra Sausages $2。这三个复选框的黙认对像名称为 checkBox,checkBox_2 和 checkBox_3。

  6. 分别将这些对像名称改为 checkBoxCheese,checkBoxOlives 和 checkBoxSausages。

  7. 将Label部件的 objectName 属性设置为 labelAmount。

  8. 将应用程序保存为 demoCheckBox1.ui。现在,窗体看起来如下截图所示:

这个 .ui (XML)文件要通过 pyuic5 命令转换成 Python 代码。生成的 Python 代码 demoCheckBox1.py文件可以在本书附带源码文件中查找。

  1. 在程序中作为头文件导入 demoCheckBox1.py文件以调用用户界面设计,并写代码计算常规比萨的和选中的浇头的总价格,当用户选中或取消选中复选框时通过 Label 部件显示总价格。

  2. 将程序命名为 callCheckBox1.pyw;它的代码如下所示:

import sys
from PyQt5.QtWidgets import QDialog
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
from demoCheckBox1 import *
class MyForm(QDialog):
	def __init__(self):
        super().__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.checkBoxCheese.stateChanged.connect(self.
        dispAmount)
        self.ui.checkBoxOlives.stateChanged.connect(self.
        dispAmount)
        self.ui.checkBoxSausages.stateChanged.connect(self.
        dispAmount)
        self.show()
    def dispAmount(self):
    	amount=10
    	if self.ui.checkBoxCheese.isChecked()==True:
        	amount=amount+1
        if self.ui.checkBoxOlives.isChecked()==True:
        	amount=amount+1
        if self.ui.checkBoxSausages.isChecked()==True:
        	amount=amount+2
        self.ui.labelAmount.setText("Total amount for pizza is "+str(amount))
if __name__=="__main__":
	app = QApplication(sys.argv)
	w = MyForm()
	w.show()
	sys.exit(app.exec_())

它是如何工作的...

复选框的 stateChanged() 事件连接到 dispAmount 函数,该函数将计算比萨的成本以及所选配料。在disamount函数中,检查复选框的状态,以确定它们是选中的还是未选中的。选中复选框的浇头的成本被添加并存储在amount变量中。最后,通过labelAmount显示存储在amount变量中的金额的加法。运行应用程序时,会出现一个对话框,提示您选择要添加到常规披萨中的配料。在选择任何浇头时,常规比萨的数量以及所选择的浇头将显示在屏幕上,如下图所示:

每次复选框的状态发生变化时,都会调用 dispAmount 函数。因此,只要任何复选框被选中或未选中,总金额将通过 Label 部件显示。