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

Qt5 Python GUI 编程指南

输入对话框的使用

输入对话框可以接受任何类型的数据,包括整数,浮点数和文本。在本节,我们将学习从用户那里获取文本。我们将通过使用一个输入框来了解用户所居住的国家。

这个输入对话框将显示一个拥有不同国家选项列表的组合框。通过名称选择一个国家,被选择的国家名称将会显示在文本框中。

如何去做...

让我们基于Dialog without Buttons模板创建一个新的应用程序,步骤如下:

  1. 因为应用程序要通过输入对话框提示用户选择他/她所居住的国家,因此拖动一个Label部件,一个Line Edit部件和一个Push Button部件放到窗体上。

  2. 将Label部件的text属性值设置为Your Country。

  3. 将Push Button的text属性值设置为Choose Country。

  4. 将Line Edit部件的objectName属性设置为lineEditCountry。

  5. 将Push Button的objectName属性设置为pushButtonCountry。

  6. 保存应用程序,命名为demoInputDialog.ui。

    窗体的样式如下所示:

    用户界面是使用Qt Designer软件创建的并保存为.ui的文件,这是一个XML文件,需要将其转化为Python代码。

  1. 要将上面的UI文件转换成Python代码,你需要打开命令行提示窗口,进入文件所在的文件夹,并输入以下命令:

    C:\Pythonbook\PyQt5>pyuic5 demoInputDialog.ui -o demoInputDialog.py

    你可以在本书源码目录中找到名为demoInputDialog.py的Python脚本。

  2. 将这个demoInputDialog.py脚本作为一个头文件,并导入到你想要引用这个用户界面设计的程序中。

  3. 创建另一个Python文件,名为callInputDialog.pyw并导入demoInputDialog.py代码:

import sys
from PyQt5.QtWidgets import QDialog, QApplication, QInputDialog
from demoInputDialog import *
class MyForm(QDialog):
    def __init__(self):
        super().__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.pushButtonCountry.clicked.connect(self.dispmessage)
        self.show()
    def dispmessage(self):
        countries = ("Albania", "Algeria", "Andorra", "Angola",
        "Antigua and Barbuda", "Argentina", "Armenia", "Aruba",
        "Australia", "Austria", "Azerbaijan")
        countryName, ok = QInputDialog.getItem(self, "Input
        Dialog", "List of countries", countries, 0, False)
        if ok and countryName:
        	self.ui.lineEditCountry.setText(countryName)
if __name__=="__main__":
    app = QApplication(sys.argv)
    w = MyForm()
    w.show()
    sys.exit(app.exec_())

它是如何工作的...

在demoInputDialog.py文件中,创建了一个以Ui_开头的顶级对象名称的类。那就是说,对于顶级对象Dialog,创建了这个Ui_Dialog类,并存储了界面部件元素。那个类有两个方法,setupUi()和retranslateUi()。

这个setupUi()方法创建了用户在Qt Designer中定义的用户界面。同时,在这个方法中还为每个部件设置相关的属性值。这个setupUi()方法只有一个参数,那就是这个应用程序的顶层部件,即一个QDialog实例。这个retranslateUi()方法用于转换界面。

在callInputDialog.pyw文件中,你可以看到Push Button的单击事件与dispmessage()方法相关联,用于选择国家;当用户单击这个按钮时,就会调用这个dispmessage()方法。dispmessage()方法定义了一个叫countries的字符串数组,里面以数组的形式包含了一些国家的名称。之后,调用QInputDialog类中的getItem()方法并打开一个显示了一个组合框部件的输入对话框。当用户单击组合框时,它就会展开,显示countries数组中分配的国家的名称。当用户选择了一个国家,再单击对话框中的OK按钮,那么被选择的国家名称就会被赋值给countryName变量。然后,这个被选择的国家名称就会通过Line Edit部件显示在窗体上。

运行应用程序,你会得一个空的Line Edit部件和一个Choose Country的按钮,如下面的截图所示:

单击Choose Country按钮,就会显示输入对话框,如下图所示。这个输入对话框中显示了一个组合框和两个按钮分别是OK和Cancel。单击组合框,它会展示一些国家的名称,如下图所示:

在组合框中选择一个国家的名称后,再单击OK按钮,被选择的国家名称应会显示在Line Edit框中,如下图所示: