2013-04-03 51 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/

相关问题