2015-04-18 3 views
0

Я установил PyQt5 и Python3.4. Но Когда я построил свою программу, у меня появилось сообщение об ошибке.AttributeError: объект 'module' не имеет атрибута 'QtWidget'

AttributeError: 'модуль' объект не имеет атрибута 'QtWidget'

Как я могу решить эту проблему?

from PyQt5 import QtCore, QtGui, QtWidgets 
import sys 

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) 
except AttributeError: 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context,text) 

class Ui_Form(QtGui.QtWidget): 
    def __init__(self): 
     QtGui.QWidget.__init__(self) 
     self.setupUi(self) 

    def setupUi(self, Form): 
     Form.setObjectName("Form") 
     Form.resize(400, 300) 
     self.horizontalLayout_2 = QtWidgets.QHBoxLayout(Form) 
     self.horizontalLayout_2.setObjectName("horizontalLayout_2") 
     self.horizontalLayout = QtWidgets.QHBoxLayout() 
     self.horizontalLayout.setObjectName("horizontalLayout") 
     self.PrintHam_btn = QtWidgets.QPushButton(Form) 
     self.PrintHam_btn.setObjectName("PrintHam_btn") 
     self.horizontalLayout.addWidget(self.PrintHam_btn) 
     self.horizontalLayout_2.addLayout(self.horizontalLayout) 

     self.retranslateUi(Form) 
     QtCore.QMetaObject.connectSlotsByName(Form) 

    def retranslateUi(self, Form): 
     _translate = QtCore.QCoreApplication.translate 
     Form.setWindowTitle(_translate("Form", "Super Ham")) 
     self.PrintHam_btn.setText(_translate("Form", "Print Ham")) 
     self.PrintHam_btn.clicked.connect(self.printHam) 

    def printham(self): 
     print ("Ham!") 

    if __name__ == '__main__': 
     app = QtGui.QApplication (sys.argv) 
     ex = Ui_Form() 
     ex.show() 
     sys.exit(app.exec_()) 

это мой код. Я понятия не имею, почему он сказал, что нет ни одного QtWidgets

+0

Я написал код, от PyQt5 импорта QtCore, QtGui, Qtwidgets тогда, PyCharm подчеркнуть это, и это говорит, есть ошибка, как, AttributeError: «модуль» объект не имеет атрибута «QtWidget» Я установил PyQt5, так QtWidget уже установлен, и я проверил, что папка QtWidget находится на C: \ Python34 \ Lib \ site-packages \ PyQt5 \ sip \ QtWidgets. Я не знаю, что я должен сделать, чтобы решить эту проблему. :( –

+0

Я изменил его. Извините, я впервые использовал этот сайт –

ответ

0

Я думаю, что проблема в том, что на этой линии:

class Ui_Form(QtGui.QtWidget): 

Вы говорите QtWidget, когда он должен сказать QWidget.

+0

Я думаю, что это не проблема, потому что я просто набрал чей-то код. Я установил на C: \ Python34 \ Lib \ site-packages \ PyQt5 И QtWidget находится в папке PyQt5 –

2

Первая ошибка, которую вы принимаете, - отредактировать модуль, составленный pyuic. Никогда, никогда, не делайте этого. Всегда импортируйте модуль в основное приложение, чтобы его можно было повторно скомпилировать, когда это необходимо.

Многие классы, которые были в модуле QtGui в Qt4, переместились в модуль QtWidgets в Qt5. Существуют также другие классы (например, QString), которые больше не доступны в PyQt5.

Похоже, что ваш примерный код был скомпилирован с pyuic4, поэтому вы не можете использовать его с PyQt5. Вам необходимо скомпилировать его с помощью pyuic5.

(Существует также опечатка в вашем примере кода Там нет такого класса, как QtWidget:. Вы, вероятно, имел в виду QWidget Но фиксируя, что не достаточно Вы должны повторно скомпилировать модуль с pyuic5, чтобы исправить все проблемы.). ,

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