2014-02-09 4 views
-3

Я новичок в программировании GUI под Python и только что получил книгу «Rapid GUI Programming with Python and QT» от Summerfield. Самый первый простой пример («всплывающее предупреждение в 25 строках») на стр. 112 работает, но моя попытка точно воспроизвести второй пример («оценщик выражений в 30 строках») на стр. 116 дает только пустое окно с нет видимых полей для ввода или вывода и даже названия окна. Это под Mac OS X 10.8.5 с использованием новейшей 64-разрядной установки Python Enthought Canopy (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 не поднимает AttributeError, когда он указан в self.connect).

Смежные вопросы