2013-04-03 2 views
2

новый для PyQt4, так голый со мной здесь.Объект PyQt4 MainWindow не имеет атрибута

Я пишу некоторый графический интерфейс, а затем я хочу добавить текст в списокView. Прямо сейчас я просто хочу добавить «привет», чтобы понять это, и тогда я буду расти оттуда.

Вот пример моего кода:

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 смотрел на меня как на название класса. Я бы рекомендовал изменить имя этого параметра переменной/метода на mainWindow или main_window или mainwin или подобное.

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/

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