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

Qt5 Python GUI 编程指南

数据类型转换并编写一个小的计算器

接受一行数据最常用的部件是Line Edit部件,并且Line Edit部件的黙认数据类型是字符串。为了实现两个整数值之间的计算,你需要将Line Edit部件中输入的字符串数据转换为整型数据,然后再转换计算结果,也就是在使用Label部件显示结果之前,将这个数值型的结果数据数转换回字符串类型。本节就是这样做的。

如何去做...

为了理解用户是如何接受数据的,又是如何进行类型转换的,让我们基于Dialog without Buttons模板创建一个应用程序,执行步骤如下:

  1. 拖动3个Label,2个Line Edit和4个Push Button部件放到窗体上,以向窗体上添加3个QLabel,2个QLineEdit和1个QPushButton部件。

  2. 将这2个Label部件的text属性分别设置为Enter First Number和Enter Second Number。

  3. 将3个Label的objectName属性分别设置为labelFirstNumber,labelSecondNumber和labelResult。

  4. 将这2个Line Edit部件的objectName属性分别设置为lineEditFirstNumber和lineEditSecondNumber。

  5. 将这4个Push Button部件的objectName属性设置为pushButtonPlus,pushButtonSubtract,pushButtonMultiply和pushButtonDivide。

  6. 将这些按钮的text属性分别设置为+,-,x和/。

  7. 删除第三个标签黙认的text属性,因为当两个数值相加时,Python脚本将会为其设置值并显示。

  8. 不要忘记拖动设计区中的Label部件以保证它有足够的长度来显示Python脚本计算后分配给它的文本。

  9. 将UI文件保存为demoCalculator.ui。

  10. 你也可以通过设置Property Editor窗口中geometry栏下的width属性来改变Label部件的宽度:

    

    这个 .ui文件是XML格式的,需要转换成Python代码。生成的Python代码名为demoCalculator.py,可以在本书附带的源代码文件中看到。

  1. 创建一个名为callCalculator.pyw的Python脚本并导入demoCalculator.py以调用用户界面的设计,然后捕获这些Line Edit部件中的值并显示它们的和。Python脚本代码callCalculator.pyw,如下所示:

import sys
from PyQt5.QtWidgets import QDialog, QApplication
from demoCalculator import *
class MyForm(QDialog):
    def __init__(self):
        super().__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.pushButtonPlus.clicked.connect(self.addtwonum)
        self.ui.pushButtonSubtract.clicked.connect(self.subtracttwonum)
        self.ui.pushButtonMultiply.clicked.connect(self.multiplytwonum)
        self.ui.pushButtonDivide.clicked.connect(self.dividetwonum)
        self.show()
    def addtwonum(self):
        if len(self.ui.lineEditFirstNumber.text())!=0:
        	a=int(self.ui.lineEditFirstNumber.text())
        else:
        	a=0
        if len(self.ui.lineEditSecondNumber.text())!=0:
        	b=int(self.ui.lineEditSecondNumber.text())
        else:
        	b=0
        	sum=a+b
        self.ui.labelResult.setText("Addition: " +str(sum))
    def subtracttwonum(self):
        if len(self.ui.lineEditFirstNumber.text())!=0:
            a=int(self.ui.lineEditFirstNumber.text())
        else:
            a=0
        if len(self.ui.lineEditSecondNumber.text())!=0:
            b=int(self.ui.lineEditSecondNumber.text())
        else:
            b=0
            diff=a-b
        self.ui.labelResult.setText("Substraction: " +str(diff))
    def multiplytwonum(self):
        if len(self.ui.lineEditFirstNumber.text())!=0:
        	a=int(self.ui.lineEditFirstNumber.text())
        else:
        	a=0
        if len(self.ui.lineEditSecondNumber.text())!=0:
        	b=int(self.ui.lineEditSecondNumber.text())
        else:
            b=0
            mult=a*b
        self.ui.labelResult.setText("Multiplication: " +str(mult))
    def dividetwonum(self):
        if len(self.ui.lineEditFirstNumber.text())!=0:
        	a=int(self.ui.lineEditFirstNumber.text())
        else:
        	a=0
        if len(self.ui.lineEditSecondNumber.text())!=0:
        	b=int(self.ui.lineEditSecondNumber.text())
        else:
            b=0
            division=a/b
        self.ui.labelResult.setText("Division: "+str(round(division,2)))
if __name__=="__main__":
    app = QApplication(sys.argv)
    w = MyForm()
    w.show()
    sys.exit(app.exec_())

它是如何工作的...

以下是代码中使用四个函数:

  • len():这个函数用于返回字符串中字符个数

  • str():这个函数用于将传递给它的内容转换成字符串类型

  • int():这个函数用于将传递给它的内容转换成整数类型

  • round():这个函数将传递给他的数值四舍五入为指定的十进制数字

pushButtonPlus按钮的的clicked()事件连接了addtwonum()方法以显示这两个Line Edit部件中输入数据的和。在addtwonum()方法中,你要先验证lineEditFirstNumber和lineEditSecondNumber,保证如果有任意一个Line Edit被用户留空(即用户未输入任何数据,这里并未考虑输入非数字的情况),就认为它的值是0。

获取这两个Line Edit部件中输入的值,并通过int()函数将其转成整型值,然后,将这两个整型值分别赋给变量a和b。计算a与b变量值的和并将其存储在变量sum中。再将sum变量中的结果通过str()方法转换成字符串格式,通过labelResult显示在窗体上,如下截图所示:

类似的,pushButtonSubtract按钮的clicked()事件与subtracttwonum()方法关联,用于计算这两个Line Edit部件中输入数字的差。此外,在验证这两个Line Edit部件之后,获取它们中的输入值并转换成整型。在这两个数值上应用减法运算,并将计算结果赋给diff变量。最后,将diff变量中的结果通过str()方式转换成字符串格式,再通过labelResult显示在窗体上,如下截图所示:

类似的,pushButtonMultiply和pushButtonDivide按钮的clicked()事件分别与multiplytwonum()和dividetwonum()这两个方法相关联。这两个方法分别计算这两个Line Edit部件中输入值的乘法和除法,并将它们通过labelResult部件显示在窗体上。

乘法的结果如下截图所示:

除法的结果如下截图所示: