属性错误:模块'PyQt5.QtGui'没有属性'QWidget'



所以,我正在尝试为我拥有的python代码制作一个UI,但总是绊倒问题......

现在,代码所做的只是制作一个窗口,带有 2 个文本编辑器框和一个按钮。按下按钮时,它会打印"测试"。

我使用QTDesigner制作UI,然后使用PyQt5将其转换为python,并编辑代码。

我的代码:

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'widget.ui'
#
# Created by: PyQt5 UI code generator 5.9
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Widget(QtGui.QWidget):
def setupUi(self, Widget):
Widget.setObjectName("Widget")
Widget.resize(681, 382)
self.horizontalLayout = QtWidgets.QHBoxLayout(Widget)
self.horizontalLayout.setContentsMargins(11, 11, 11, 11)
self.horizontalLayout.setSpacing(6)
self.horizontalLayout.setObjectName("horizontalLayout")
self.in_box = QtWidgets.QTextEdit(Widget)
self.in_box.setMaximumSize(QtCore.QSize(200, 350))
self.in_box.setObjectName("in_box")
self.horizontalLayout.addWidget(self.in_box)
self.convert = QtWidgets.QPushButton(Widget)
self.convert.setObjectName("convert")
self.horizontalLayout.addWidget(self.convert)
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setContentsMargins(11, 11, 11, 11)
self.gridLayout.setSpacing(6)
self.gridLayout.setObjectName("gridLayout")
self.out_box = QtWidgets.QTextEdit(Widget)
self.out_box.setMaximumSize(QtCore.QSize(200, 350))
self.out_box.setObjectName("out_box")
self.gridLayout.addWidget(self.out_box, 6, 0, 1, 1)
self.horizontalLayout.addLayout(self.gridLayout)
self.retranslateUi(Widget)
QtCore.QMetaObject.connectSlotsByName(Widget)
def retranslateUi(self, Widget):
_translate = QtCore.QCoreApplication.translate
Widget.setWindowTitle(_translate("Widget", "Converter"))
self.convert.setText(_translate("Widget", "Convert"))
self.convert.clicked.connect(self.convertclick)
def convertclick(self):
print ('Test')

if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Widget = QtWidgets.QWidget()
ui = Ui_Widget()
ui.setupUi(Widget)
Widget.show()
sys.exit(app.exec_())

这是我得到的错误:

AttributeError: module 'PyQt5.QtGui' has no attribute 'QWidget'

即使我改变class Ui_Widget(QtGui.QWidget):class Ui_Widget(QtGui.QtWidgets):我得到AttributeError: module 'PyQt5.QtGui' has no attribute 'QtWidgets'

有谁知道问题可能是什么?

干杯。

你的错误来自这里:

Ui_Widget(QtGui.QWidget)

它基本上告诉你问题是什么。

看起来你在这里混合了一些QT4和QT5,因为你的导入是QT5风格,但QtGui.QWidget看起来像QT4风格。

将该行替换为:

Ui_Widget(QtWidgets.QWidget)

根据文档,这应该是兼容的

备注:我不知道你到底在做什么,但当你提到这个时:Even when I change class Ui_Widget(QtGui.QWidget): to class Ui_Widget(QtGui.QtWidgets): I get AttributeError: module 'PyQt5.QtGui' has no attribute 'QtWidgets'没错。您已经导入了 QtWidgets,而不是从 PyQt5.QtGui 导入。只需在那里使用Ui_Widget(QtWidgets(。

简而言之:所有这些错误似乎都与 QT4 和 QT5 之间的模块重构有关。文档应该会有所帮助。

最新更新