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

Qt5 Python GUI 编程指南

使用Radio Button部件

本节通过Radio Button显示某一航班的类型,当在用户选择单选按钮时,将显示与那次航班相关联的价格。我们需要首先理解Radio Button的功能。

理解Radio Button

Radio Button部件是非常流行的,它能允许用户从多个可用选项中仅选出一个选项。这些选项称为互斥选项。当用户选择一个选项时,先前选择的选项将自动取消选择。Radio Button部件是QRadioButton类的实例。每个单选按钮都有一个相关的文本标签。单选按钮可以选择(checked)或取消选择(unchecked)。如果你想有两个或更多的单选按钮组,并只允许每个单选按钮组中的选项相互排斥,那么可以它们分别放到不同的按钮组(QButtonGroup的实例)中。QRadioButton中提供的方法将在下面显示。

方法

QRadioButton类提供了以下常用方法:

  • isChecked():如果按钮处于选定状态,该方法返回布尔值true。

  • setIcon():此方法显示带有单选按钮的图标。

  • setText():此方法将文本分配给单选按钮。如果希望为单选按钮指定快捷键,请在文本中首选字符前面加上(&)。快捷字符将标注下划线。

  • setChecked():如果要想让此单选按钮黙认为选中状态,为此方法传递布尔值true。

信号描述

QRadioButton发出的信号如下:

  • toggled():每当按钮将其状态从选中更改为未选中时,就会发出此信号,反之亦然

  • clicked():当按钮被激活(即按下并释放)或按下其快捷键时,将发出此信号

  • stateChanged():当单选按钮的状态从已选中变为未选中或相反时,将发出此信号

为了理解单选按钮的概念,让我们创建一个应用程序,要求用户选择航班类型并以单选按钮的形式显示三个选项,First Class,Business Class和Economy Class。当通过单选按钮选择一个选项时,将显示该航班的价格。

如何去做...

让我们基于Dialog without Buttons模板新建一个应用。这个应用程序将显示不同的航班类型以及它们各自的价格。当用户选择航班类型时,其价格将显示在屏幕上:

  1. 拖动两个 Label 部件和三个 Radio Button部件并放到窗体上。

  2. 将第一个 Label 部件的 text 属性设置为 Choose the flight type,并删除第二个 Label 部件的 text 属性。第二个 Label 部件的 text 属性是通过代码来设置的;它将用来显示选中航班类型的价格。

  3. 将这三个 Radio Button 部件的 text 属性分别设置为 First Class $150,Business Class $125 和 Economy Class $100。

  4. 将第二个 Label 部件的 objectName 的值设置为 labelFare。这三个单选按钮的黙认对象名称为radioButton,radioButton_2,radioButton_3。要将这三个单选按钮的 objectName 属性分别设置为radioButtonFirstClass,radioButtonBusinessClass 和 radioButtonEconomyClass。

  5. 将应用保存为demoRadioButton1.ui名:

    看下面的截图:

这个 demoRadioButton1.ui 应用是一个XML文件,我们需要使用pyuic5工具集将它转换成Python代码。生成的Python代码的名称为demoRadioButton1.py,可以在本书提供的源代码中查看。

  1. 在 Python 脚本中导入头文件demoRadioButton1.py,后面就可以调用这个用户界的设计了。

  2. 在 Python 脚本中,根据用户选择的单选按钮,编写代码显示航班类型。callRadioButton1.py 文件的源代码如下所示:

import sys
from PyQt5.QtWidgets import QDialog, QApplication
from demoRadioButton1 import *
class MyForm(QDialog):
    def __init__(self):
        super().__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.radioButtonFirstClass.toggled.connect(self.
        dispFare)
        self.ui.radioButtonBusinessClass.toggled.connect(self.
        dispFare)
        self.ui.radioButtonEconomyClass.toggled.connect(self.
        dispFare)
        self.show()
    def dispFare(self):
        fare=0
        if self.ui.radioButtonFirstClass.isChecked()==True:
        	fare=150
        if self.ui.radioButtonBusinessClass.isChecked()==True:
        	fare=125
        if self.ui.radioButtonEconomyClass.isChecked()==True:
        	fare=100
        self.ui.labelFare.setText("Air Fare is "+str(fare))
if __name__=="__main__":
    app = QApplication(sys.argv)
    w = MyForm()
    w.show()
    sys.exit(app.exec_())

它是如何工作的...

Radio Button的 toggled() 事件与 dispFare() 方法相关联,这个法将显示选中的航班类型的价格。在这个dispFare() 方法中,你将检查单选按钮的状态。因此,如果 radioButtonFirstClass 选中了,那就会将 fare 变量的值设为50。类似的,如果 radioButtonBusinessClass 选中了,就把125 赋值给 fare 变量。同理,当 radioButtonEconomyClass 选中了,就将100赋值给 fare 变量。最终,fare 变量的值将会通过 labelFare 显示在屏幕上。

执行前面的程序,你将得到一个显示了三个航班类型的对话框,并且提示用户选择他/她想要旅行的航班类型。当选择一个航班类型时,就会显示这个航班相关的价格,如下截图所示: