【问题标题】:AttributeError: module 'PyQt5.QtGui' has no attribute 'QWidget'AttributeError:模块“PyQt5.QtGui”没有属性“QWidget”
【发布时间】:2018-01-12 01:55:29
【问题描述】:

所以,我正在尝试为我拥有的 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'

有谁知道问题出在哪里?

干杯。

【问题讨论】:

标签: python pyqt5 qt-designer


【解决方案1】:

您的错误来自这里:

Ui_Widget(QtGui.QWidget)

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

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

将行替换为:

Ui_Widget(QtWidgets.QWidget)

根据docs应该是兼容的

备注:我不知道你到底在做什么,但是当你提到这个时: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 之间的模块重构有关。文档应该会有所帮助。

【讨论】:

  • Traceback (most recent call last): File "converter_widget_ui.py", line 11, in <module> class Ui_Widget(QtWidgets.QWidget): File "converter_widget_ui.py", line 43, in Ui_Widget self.convert.clicked.connect(self.convertclick) NameError: name 'self' is not defined
猜你喜欢
  • 2021-08-25
  • 1970-01-01
  • 2018-10-17
  • 2021-04-03
  • 1970-01-01
  • 2018-04-14
  • 2019-02-18
相关资源
最近更新 更多