PyQt5学习教程12:数学表达式解析程序

来源:互联网 发布:毕向东java视频百度云 编辑:程序博客网 时间:2024/06/06 12:57
本文将介绍一个相对完整的程序,我么可以在程序界面中输入数学表达式,然后点击“确认”按钮,程序会自动对输入的数学表达式进行解析,如果能够解析出正确答案,则在上面的TextBrowser控件中进行显示,否则提示用户输入错误。


源程序:

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

原创粉丝点击