2014-02-09 59 views
-3

我是Python下的GUI編程的新手,剛剛拿到Summerfield編寫的「Python和QT的快速GUI編程」一書。第112頁的第一個簡單示例(第25頁中的「彈出警報」)工作正常,但我試圖完全複製第116頁的第二個示例(第30頁上的「表達式賦值器」),只生成一個空白窗口,沒有任何條目或輸出的可見字段,甚至沒有窗口標題。這是在Mac OS X 10.8.5使用最新的Enthought冠64位Python安裝(1.2.0.1610)書中的簡單PyQt演示不起作用

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. 本書有錯誤。
+0

我懷疑可能性#1,因爲'updateUi()'應該是Form類的一個方法,並且需要相應地縮進。 – Johnsyweb

+1

你說得對,該方法應該縮進(現在已修復),但似乎沒有改變結果。 –

回答

0

這是您的代碼中的拼寫錯誤。

Form.__init__方法缺少初始下劃線,因此它永遠不會被調用。

(PS:這也解釋了爲什麼updateUi方法的不正確縮進在self.connect中引用時不會引起AttributeError)。