Por lo tanto, estoy tratando de hacer una interfaz de usuario para un código en python que tengo, pero mantener el tropiezo en problemas…

Ahora mismo, todo el código que hace es hacer una ventana, con 2 editor de texto cuadros, y un botón. Cuando se pulsa el botón, se imprime ‘Prueba’.

He utilizado QTDesigner para hacer la interfaz de usuario, a continuación, PyQt5 para convertirlo en python, y editado el código.

Mi código:

   # -*- 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_())

Este es el error:

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

Incluso cuando cambio class Ui_Widget(QtGui.QWidget):
a class Ui_Widget(QtGui.QtWidgets):
Puedo obtener AttributeError: module 'PyQt5.QtGui' has no attribute 'QtWidgets'

Cualquiera que sabe lo que puede ser el problema?

Saludos.

InformationsquelleAutor CandyGum | 2017-08-04

1 Comentario

  1. 8

    Su error es de aquí:

    Ui_Widget(QtGui.QWidget)

    Básicamente le dice cuál es el problema.

    Parece que se están mezclando algunos de QT4 y dlls de qt5 aquí como su importación es en dlls de qt5-estilo, pero QtGui.QWidget parece QT4-estilo.

    Reemplace la línea con:

    Ui_Widget(QtWidgets.QWidget)

    que debe ser compatible, de acuerdo a la docs

    Comentario: no sé lo que realmente están haciendo, pero cuando usted menciona esto: 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' Que es correcto. Ya ha importado QtWidgets, y no de PyQt5.QtGui. Sólo uso Ui_Widget(QtWidgets) no.

    En resumen: todos estos errores parecen estar relacionados con la refactorización en lo que respecta a los módulos entre QT4 y dlls de qt5. La documentación debe ayudar.

    • 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

Dejar respuesta

Please enter your comment!
Please enter your name here