PyQt5学习笔记2-GUI编程基础-2

通过三个简单软件程序分析,找到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_()

 

posted @ 2017-12-13 22:54  aiTest  阅读(586)  评论(0编辑  收藏  举报