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

Qt5 Python GUI 编程指南

Radio Button组

在这个应用程序中,我们将学习创建两个Radio Buttons组。用户可以从任意组中选择单选按钮,结果或文本将相应地显示在屏幕上。

准备

我们将显示一个对话框,其中展示不同尺寸的衬衫和不同的支付方式。在选择衬衫尺寸和付款方式时,选择的衬衫尺寸和付款方式将显示在屏幕上。我们将创建两组单选按钮,一种是衬衫尺码,另一种是付款方式。衬衫尺码组显示4个单选按钮,显示4种不同的尺码类型,如M、L、XL和XXL,其中M代表中号,L代表大号,等等。付款方式组显示三个单选按钮,Debit/Credit Card(借记卡/信用卡)、NetBanking(网银)和Cash OnDelivery(现金)。用户可以从这两个组中选择任何单选按钮。当用户选择任意一种衬衫尺寸或支付方式时,将显示所选衬衫尺寸和支付方式。

如何去做...

让我们一步一步地重新创建前面的应用程序:

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

  2. 拖放3个Label部件和7个Radio Button部件。在这7个单选按钮中,我们将在一个垂直布局中安排4个单选按钮,在第二个垂直布局中安排另外3个单选按钮。这两个布局将有助于对这些单选按钮进行分组。单选按钮是互斥的,只允许从一个布局或组中选择一个单选按钮。

  3. 将第一次添加的前两个 Label 部件的 text 属性分别设置为 Choose your Shirt Size 和 Choose your payment method。

  4. 删除第三个 Label 部件的 text 属性,因为我们将要通过代码来显示选中的衬衫尺寸和支付方式。

  5. 在Property Window窗口,增加应用中所有部件的字体大小以增加它们的可见性。

  6. 将第一组4个单选按钮的 text 属性分别设置为M,L,XL 和 XXL。调整这4个单选按钮并将它们放在垂直布局中。

  7. 将接下来的3个单选按钮的 text 属性分别设置为 Debit/Credit Card,NetBanking和Cash On Delivery。调整这3个单选钮并放到第二个垂直布局中。记住,这些垂直布局有助于为这些单选钮分组。

  8. 将前四个单选按钮的对象名称更改为radioButtonMedium、radioButtonLarge、radioButtonXL和radioButtonXXL。

  9. 将第一个QVBoxLayout布局的 objectName 属性设置为 verticalLayout。这个VBoxLayout布局用来使用这些单选按钮垂直对齐。

  10. 将后面3个单选按钮的 objectName 属性值分别设置为 radioButtonDebitCard,radioButtonNetBanking和radioButtonCashOnDelivery。

  11. 将第二个 QVBoxLayout 布局的 objectName 属性设置为 verticalLayout_2。

  12. 将第三个 Label 部件的 objectName 属性设置为 labelSelected。它是通过这个 Label 来显示选中的衬衫尺寸和支付方式的。

  13. 将应用保存为demoRadioButton2.ui。

  14. 现在,显示窗体,如下截图所示:

这个 .ui 的XML文件要通过pyuic5命令工具转换成Python代码。你可以在本书附带的源代码中找到Python源代码,名称为demoRadioButton2.py。

  1. 导入 demoRadioButton2.py,作为调用用户界面程序的头文件,编写代码,当用户选择或取消选择任何单选按钮时,显示并通过Label部件选中衬衫尺寸和支付方式。

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

import sys
from PyQt5.QtWidgets import QDialog, QApplication
from demoRadioButton2 import *
class MyForm(QDialog):
	def __init__(self):
		super().__init__()
		self.ui = Ui_Dialog()
		self.ui.setupUi(self)
		self.ui.radioButtonMedium.toggled.connect(self.dispSelected)
		self.ui.radioButtonLarge.toggled.connect(self.dispSelected)
		self.ui.radioButtonXL.toggled.connect(self.dispSelected)
		self.ui.radioButtonXXL.toggled.connect(self.dispSelected)
		self.ui.radioButtonDebitCard.toggled.connect(self.dispSelected)
		self.ui.radioButtonNetBanking.toggled.connect(self.dispSelected)
		self.ui.radioButtonCashOnDelivery.toggled.connect(self.dispSelected)
		self.show()
	def dispSelected(self):
		selected1="";
		selected2=""
		if self.ui.radioButtonMedium.isChecked()==True:
			selected1="Medium"
		if self.ui.radioButtonLarge.isChecked()==True:
			selected1="Large"
		if self.ui.radioButtonXL.isChecked()==True:
			selected1="Extra Large"
		if self.ui.radioButtonXXL.isChecked()==True:
			selected1="Extra Extra Large"
		if self.ui.radioButtonDebitCard.isChecked()==True:
			selected2="Debit/Credit Card"
		if self.ui.radioButtonNetBanking.isChecked()==True:
			selected2="NetBanking"
		if self.ui.radioButtonCashOnDelivery.isChecked()==True:
			selected2="Cash On Delivery"
		self.ui.labelSelected.setText("Chosen shirt size is "+selected1+" and payment method as " + selected2)
if __name__=="__main__":
app = QApplication(sys.argv)
w = MyForm()
w.show()
sys.exit(app.exec_())

它是如何工作的...

所有单选按钮的 toggle() 事件连接到 disselected() 函数,该函数将显示所选衬衫的尺寸和支付方法。在disselected()函数中,检查单选按钮的状态,以确定它们是选中的还是未选中的。根据第一个垂直布局中选择的单选按钮,selected1 变量的值将设置为 Medium、Large、Extra Large 或Extra Extra big。同样,在第二个垂直布局中,根据选择的单选按钮,selected2变量的值将初始化为 Debit/Credit Card、NetBanking或Cash On Delivery。最后,将通过 labelSelected 部件显示分配给 selected1 变量的选中的衬衫尺寸和支付方法。运行应用,你就能看到一个对话框,并提示你选择衬衫尺寸和支付方式。当选择一个衬衫尺寸和支付方式时,选中的衬衫尺寸和支付方式将通 Label 部件显示,如下截图所示: