这个应用完全基于对话框样式,用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