PYQT学习笔记-30行代码实现表达式计算器

来源:互联网 发布:java修饰符 编辑:程序博客网 时间:2024/06/06 13:59

        这个应用完全基于对话框样式,用30行代码实现(不计算空白以及注释)。对话框样式指应用程序没有菜单栏,也不会有工具栏和状态栏,通常只是有一些按钮(我们将在下一节中看到这种风格),没有中央部件(central widget,设置为中央部件的部件在实现时会占据主窗口的中央位置)。相反,使用主窗口样式(main window-style)的应用通常拥有菜单栏、工具栏、状态栏,某些情况下还会出现按钮。主窗口样式的应用设置有中央部件(当让了,某些情况下,中央部件是包含有其它部件的容器)。第六章将讨论主窗口样式的应用程序。

此应用使用了两个部件:

lQTextBrowser-只读的多行文本框,可以显示指定文本或HTML;

lQLineEdit    -单行文本框,用于显示纯文本信息。

PyQt部件内的文本都是Unicode编码的,若有需要这些文本也可以转化为其他的编码方式。

这个应用(计算器,如图4.3)可以如同通常的GUI应用程序一样通过点击图标运行(单击或双击运行取决于你所用的操作系统和系统设定)。(当然了,它也可以通过控制台运行)。程序运行后,用户可以简单的在单行文本框内输入数学表达式后按下回车,表达式及其计算结果将加入到QTextBrower部件中。表达式和数学错误将抛出异常信息,这些信息也将添加到QTextBrowser中。

首先,给出全部代码:

 

 

# -*- coding: utf-8 -*-from __future__ import divisionfrom PyQt4.QtGui import *from PyQt4.QtCore import *import sysfrom math import *QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8")) class Form(QDialog):    def __init__(self, parent=None):        super(Form, self).__init__(parent)        self.browser = QTextBrowser()        self.lineedit = QLineEdit("Type an expression and press Enter")        self.lineedit.selectAll()        layout = QVBoxLayout()        layout.addWidget(self.browser)        layout.addWidget(self.lineedit)        self.setLayout(layout)        self.lineedit.setFocus()        self.connect(self.lineedit, SIGNAL("returnPressed()"),self.updateUi)        self.setWindowTitle("Calculate")    def updateUi(self):        try:            text = unicode(self.lineedit.text())            self.browser.append("%s = <b>%s</b>" % (text, eval(text)))        except:            self.browser.append("<font color=red>%s is invalid!</font>" % text)if __name__ == "__main__":          app=QApplication(sys.argv)    myqq=Form()    myqq.show()    app.exec_()


 

按照惯例,我们一段一段来审视代码。后面所有GUI应用程序将使用与本例相同的模式:窗体通过一个类实现,用户交互行为通过方法处理,程序的main部分则非常的精悍。

from __future__ import division import sys from math import * from PyQt4.QtCore import * from PyQt4.QtGui import *  


 

       我们需要的数字运算用不着什么整除之类的,而是浮点运算。通常对于非PyQt组件使用import moduleName的方式导入,然而在本例中我们需要导入所有math组件下的函数和常量。我们通过导入sys来获得sys.argv列表,并导入QtCore和QtGui组件下的所有内容。

 

转载申明:本站原创,欢迎转载。但转载时请保留原文地址。
原文地址:http://www.2sos.net/post/332.html
原创粉丝点击