通过三个简单软件程序分析,找到PyQt GUI编程的感觉!
(源自《Rapid GUI Programming with Python and Qt》,本文将示例由Qt4改成Qt5版本)
软件2:计算器
该示例是一个对话框应用程序,即没有菜单栏、工具条、状态栏。
软件功能:
1.用户输入数学表达式,按回车键后,表达式及结果就会显示出来。
2.如果输入的表达式无效,软件会显示错误信息。
软件运行效果图
1 ‘‘‘
2 一个计算器
3 该示例是一个对话框应用程序,即没有菜单栏、工具条、状态栏。
4 软件功能:
5 1.用户输入数学表达式,按回车键后,表达式及结果就会显示出来。
6 2.如果输入的表达式无效,软件会显示错误信息。
7 ‘‘‘
8
9 import sys
10 from math import * # 输入的表达式可使用math模块中所有数学函数,如sin、cos
11 from PyQt5.QtWidgets import * # 使用此模块中的QWidget,QTextBrowser、QLineEdit
12
13 # 通过QDialog子类化的方法创建一个顶级窗口
14 # PyQt中的所有控件都是继承自QWidget, 如:QDialog,QLineEdit
15 class Form(QDialog):
16
17 def __init__(self):
18 super().__init__() # 初始化窗口
19
20 # 创建两个窗口控件
21 self.browser = QTextBrowser()
22 self.lineedit = QLineEdit("Type an expression and press Enter")
23 self.lineedit.selectAll()
24
25 # 创建一个垂直布局管理器QVBoxLayout
26 # PyQt提供了三种布局管理器:垂直布局/水平布局/网格布局,它们可以彼此嵌套。
27 # 使用了布局管理器后,各种控件会随着窗口的大小改变自动调整。
28 layout = QVBoxLayout()
29 layout.addWidget(self.browser)
30 layout.addWidget(self.lineedit)
31 self.setLayout(layout)
32
33 self.lineedit.setFocus()
34
35 # 信号(returnPressed)连接到槽(updateUi)
36 # 当用户在lineedit上按下回车键时,retrunPressed信号就会发射出来,
37 # 因有connect , 此时会调用updateUi().
38 self.lineedit.returnPressed.connect(self.updateUi)
39
40 self.setWindowTitle("Calculate")
41
42 def updateUi(self):
43 try:
44 text = self.lineedit.text()
45
46 # 使用eval函数计算表达式的值
47 self.browser.append("{} = <b>{}</b>".format(text,eval(text)))
48 except:
49 self.browser.append("<font color=red>{} is invalid!</font>".format(text))
50
51 app = QApplication(sys.argv)
52 form = Form() # 创建Form实例
53 form.show() # 调用了show()后,事件循环开始,显示出窗口
54 app.exec_()