PyQt5学习教程12:数学表达式解析程序
来源:互联网 发布:毕向东java视频百度云 编辑:程序博客网 时间:2024/06/06 12:57
源程序:
import sysfrom PyQt5.QtWidgets import QWidget, \ QPushButton, \ QToolTip, \ QMessageBox, \ QApplication, \ QDesktopWidget, \ QMainWindow, \ QAction, \ qApp, \ QVBoxLayout, \ QHBoxLayout, \ QTextBrowser, \ QLineEditfrom PyQt5.QtCore import Qtfrom PyQt5.QtGui import QFont, \ QIcon# QMainWindow是QWidget的派生类class CMainWindow(QMainWindow): def __init__(self): super().__init__() # ToolTip设置 QToolTip.setFont(QFont('华文楷体', 10)) # statusBar设置 self.statusBar().showMessage('准备就绪') # 退出Action设置 exitAction = QAction(QIcon('1.png'), '&Exit', self) exitAction.setShortcut('ctrl+Q') exitAction.setStatusTip('退出应用程序') exitAction.triggered.connect(qApp.quit) # qApp就相当于QCoreApplication.instance() # menuBar设置 menubar = self.menuBar() fileMenu = menubar.addMenu('&File') fileMenu.addAction(exitAction) # toolBar设置 self.toolbar = self.addToolBar('Exit') self.toolbar.addAction(exitAction) # 确认PushButton设置 btnOK = QPushButton("确认") btnOK.setToolTip("点击此按钮将确认改变!") btnOK.setStatusTip("点击此按钮将确认改变!") btnOK.clicked.connect(self.funOK) btnOK.resize(btnOK.sizeHint()) # 取消PushButton设置 btnCancel = QPushButton("取消") btnCancel.setToolTip("点击此按钮将放弃改变!") btnCancel.setStatusTip("点击此按钮将放弃改变!") btnCancel.clicked.connect(self.funCancel) btnCancel.resize(btnCancel.sizeHint()) # 退出PushButton设置 btnQuit = QPushButton('退出') btnQuit.setToolTip("点击此按钮将退出应用程序!") btnQuit.setStatusTip("点击此按钮将退出应用程序!") btnQuit.clicked.connect(qApp.quit) btnQuit.resize(btnQuit.sizeHint()) # PushButton布局 hBox = QHBoxLayout() hBox.addStretch(1) hBox.addWidget(btnOK) hBox.addWidget(btnCancel) hBox.addWidget(btnQuit) # QTextBrwoser是只读的多行文本框,既可以显示普通文本,又可以显示HTML self.textBrowser = QTextBrowser() # 单行文本框 self.lineEdit = QLineEdit("请输入表达式,然后按确认键") self.lineEdit.selectAll() self.lineEdit.returnPressed.connect(self.funOK) # 布局 vBox = QVBoxLayout() vBox.addWidget(self.textBrowser) vBox.addWidget(self.lineEdit) vBox.addLayout(hBox) widget = QWidget() self.setCentralWidget(widget) # 建立的widget在窗体的中间位置 widget.setLayout(vBox) # 布局完毕后,才可得到焦点 self.lineEdit.setFocus() # Window设置 self.resize(500, 300) self.center() self.setFont(QFont('华文楷体', 10)) self.setWindowTitle('PyQt5应用教程(snmplink编著)') self.setWindowIcon(QIcon('10.png')) self.show() def center(self): # 得到主窗体的框架信息 qr = self.frameGeometry() # 得到桌面的中心 cp = QDesktopWidget().availableGeometry().center() # 框架的中心与桌面中心对齐 qr.moveCenter(cp) # 自身窗体的左上角与框架的左上角对齐 self.move(qr.topLeft()) def funOK(self): try: text = self.lineEdit.text() self.textBrowser.append("{} = <b>{}</b>".format(text, eval(text))) except: self.textBrowser.append("输入的表达式<font color=red>“{}”</font>无效!".format(text)) def funCancel(self): self.lineEdit.clear() def keyPressEvent(self, e): if e.key() == Qt.Key_Escape: self.close() def closeEvent(self, QCloseEvent): reply = QMessageBox.question(self, 'PyQt5应用教程(snmplink编著)', "是否要退出应用程序?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: QCloseEvent.accept() else: QCloseEvent.ignore()if __name__ == '__main__': app = QApplication(sys.argv) MainWindow = CMainWindow() sys.exit(app.exec_())
程序解释:
1、第13行:输入QTextBrowser模块,QTextBrowser是只读的多行文本框,既可以显示普通文本,又可以显示HTML
2、第51行:btnOK的点击事件关联self.funOK方法。
3、第58行:btnCancel的点击事件关联self.funCancel方法。
4、第69-73行:对OK、Cancel和Quit三个按钮进行了布局。
5、第76行:声明了QTextBrowser对象textBrowser。
6、第78行:声明了QLineEdit对象lineEdit,并让其在程序初始时,显示“请输入表达式,然后按确认键”。
7、第79行:初始时,选中lineEdit中的全部内容。
8、第80行:处理lineEdit的回车键按下事件,和OK按钮单击事件,采用同一种处理方法。
9、第83-89行:对整体进行布局。
10、第92行:将焦点赋予lineEdit,在这里注意的是必须布局后,才能赋予焦点。
11、第112-117行:当用户点击OK键,或在lineEdit有焦点的情况下,按了回车键。使用正则表达式处理用户输入的内容,eval是对用户输入的数据进行计算。如果正确,则显示计算后的结果,不正确则告知用户输入无效。
12、第119-120行:处理用户点击Cancel键,将lineEdit中的内容清空。
程序运行效果:
1、用户输入表达式,按确认按钮进行计算并显示。
2、用户输入表达式,按回车键进行计算并显示。
3、按取消按钮,则清空用户输入的内容。
原创性文章,转载请注明出处 http://user.qzone.qq.com/2756567163。
CSDN:http://blog.csdn.net/qingwufeiyang12346
- PyQt5学习教程12:数学表达式解析程序
- PyQt5学习教程18:70行的货币转换程序
- PyQt5教程-02-程序图标
- PyQt5教程-12-切换按钮
- PyQt5学习教程17:70行的货币转换程序的编程思路
- 解析数学表达式
- 解析数学表达式
- PyQt5学习教程10:再议Grid Layout
- 程序中的数学表达式
- 数学表达式解析-JAVA版
- 数学表达式解析器简介
- c++ 实现数学表达式解析
- PyQt5系列教程(三)用py2exe进行程序打包
- pyqt5 学习
- PyQt5学习
- PyQt5学习
- 数学表达式计算程序(java)
- PyQt5学习教程1:最简单的窗体
- 如何增肌之器械使用
- TreeMap用法
- react生命周期API(3.0)及生命周期与定时器的用法;
- Qt:天气预报小程序
- 如何增肌之训练计划
- PyQt5学习教程12:数学表达式解析程序
- Ubuntu16.04LTS上安装Python3.6.3
- MAC显示隐藏文件
- ajax接收后台的text、HTML、xml、json数据,及其文件数据
- linux下的初始状态下,根目录各个文件夹的作用与说明
- 171028 逆向-以CM41为例进行Dll注入(上)
- linux redhat安装git
- Salesforce修改相关列表标签名
- 基于树莓派使用DuerOS的笔记,待续