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

46 篇文章 0 订阅

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

此应用使用了两个部件:

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

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

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

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

首先,给出全部代码:

 

 

# -*- coding: utf-8 -*-
from __future__ import division
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys
from 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值