2013-04-03 89 views
2

品牌新的PyQt4,所以在這裏裸露。PyQt4 MainWindow對象沒有任何屬性

我正在寫一些圖形用戶界面,然後我想添加文本到列表視圖。現在我只想添加「你好」來弄清楚,然後我會從那裏增長。

這裏是我的代碼示例:

from PyQt4 import QtCore, QtGui 

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    def _fromUtf8(s): 
     return s 

try: 
    _encoding = QtGui.QApplication.UnicodeUTF8 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig, _encoding) 
except AttributeError: 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig) 

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName(_fromUtf8("MainWindow")) 
     MainWindow.resize(584, 461) 
     self.centralwidget = QtGui.QWidget(MainWindow) 
     self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 
     self.lineEdit_6 = QtGui.QLineEdit(self.centralwidget) 
     self.lineEdit_6.setGeometry(QtCore.QRect(72, 210, 171, 20)) 
     .... 
     self.retranslateUi(MainWindow) 
     QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), MainWindow.addEntry) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 

    def retranslateUi(self, MainWindow): 
     .... 

    def addEntry(self): 
     listView.Items.Add("Hello") 

然後打開它:

from PyQt4 import * 
import signal 
import sys 
from PyQt4.QtGui import QApplication, QMessageBox 
from inv_window import * 
def main(): 
    app = QtGui.QApplication(sys.argv) 
    MainWindow = QtGui.QMainWindow() 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

當試圖運行此我得到:

AttributeError: 'QMainWindow' object has no attribute 'addEntry' 

如何任何想法我可以糾正這一點?我試着用搜索引擎,但我有困難的時候釘下的解決方案

回答

2

的問題似乎是在這條線:

 QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), MainWindow.addEntry) 

MainWindow變量是QMainWindow實例,所以它不」 t有addEntry方法屬於您的Ui_MainWindow類。因此,你看到的錯誤。

我想指出你的代碼的風格問題,如果我可以。在Python中,局部變量和方法/函數參數的名稱通常以小寫字母開頭。您有一個名爲MainWindow的變量(和方法參數)。當我第一次讀你的代碼時,我感到困惑,因爲MainWindow在我看來就像一個班級的名字。我建議將此變量/方法參數的名稱更改爲mainWindowmain_windowmainwin等。

1

當你寫from PyQt4 import *main()方法,你需要導入QtCore也和QtGui它考慮作爲globle.To使之具體化,你需要寫你的主要方法,如:

from PyQt4 import QtCore, QtGui 
import signal 
from PyQt4 import * 
from Ui_MainWindow import Ui_MainWindow 
from inv_window import * 
import sys 
def main(): 
      app = QtGui.QApplication(sys.argv) 
      MainWindow = QtGui.QMainWindow() 
      ui = Ui_MainWindow() 
      ui.setupUi(MainWindow) 
      MainWindow.show() 
      sys.exit(app.exec_()) 
if __name__ == "__main__": 
    main() 
0

您導入來自錯誤的模塊。不是100%確定哪一個,但我建議下載Pycharm,因爲它有助於自動完成並找出哪些模塊可用,而無需每次都在您的站點包配置中手動查找它。我建議下載PyQt5。這裏是一個很好的教程,讓你開始:http://zetcode.com/gui/pyqt5/也檢查出:https://pythonspot.com/en/pyqt5/