书中的简单PyQt演示不起作用

时间:2014-02-09 06:09:56

标签: python qt pyqt4

我是Python下的GUI编程的新手,只是得到了Summerfield的“使用Python和QT进行快速GUI编程”一书。第112页上的第一个简单示例(“25行中的弹出警报”)有效,但我尝试完全复制第116页上的第二个示例(“30行中的表达式求值程序”)只生成一个空白窗口,输入或输出都没有可见字段,甚至没有窗口标题。这是在Mac OS X 10.8.5下使用最新的Enthought Canopy 64位Python安装(1.2.0.1610)

PyQtdemo.pyw的完整内容是

from __future__ import division
import sys
from math import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
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)

app = QApplication(sys.argv)
print dir(app)
form = Form()
form.show()
app.exec_()

在我看来,只有以下几种可能性:

  1. 我的代码中有一个错误,我忽略了;
  2. 我调用脚本的方式有问题(例如“python PyQtdemo.pyw”);
  3. 我的PyQt 4.10.3-1安装有问题;
  4. 书中有错误。

1 个答案:

答案 0 :(得分:0)

这是代码中的拼写错误。

Form.__init__方法缺少初始下划线,因此永远不会被调用。

(PS:这也解释了为什么updateUi方法的错误缩进在AttributeError中引用时不会引发self.connect