【问题标题】:Simple PyQt demo from book doesn't work [closed]书中的简单 PyQt 演示不起作用 [关闭]
【发布时间】:2014-02-09 06:09:56
【问题描述】:

我是 Python 下的 GUI 编程的新手,刚刚获得 Summerfield 的“Rapid GUI Programming with Python and QT”一书。第 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,因为updateUi() 应该是Form 类的方法,需要相应地缩进。
  • 你说得对,该方法应该缩进(现在已修复),但似乎没有改变结果。

标签: python qt pyqt4


【解决方案1】:

这是您的代码中的错字。

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

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

【讨论】:

    猜你喜欢
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2014-01-05
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多