以下情况:
- 我有一个Mainwindow和一个小部件
- MainWindow和Widget是由QTDesigner创建的。
- MainWindow有一个应打开小部件的按钮。
- 我通过
*.ui
传递了CC_1文件,以使其成为更重要的Pythonic形式。 - 然后,我将MainWindow列为分类,以便我可以在按钮中添加一个触发器来调用我的小部件
最终目标是当我单击MainWindow中的按钮时,将小部件出现在新窗口中,但是窗口用exit code -1
这是代码的样子。我通过添加main()
功能对ExampleWidget.py
进行了略微更改。
# MainWindow.py
from PyQt5 import QtCore, QtGui, QtWidgets
from ui.ExampleWidget import main
from ui.ExampleMainWindow import Ui_MainWindow
class Ui_MainWindow(Ui_MainWindow):
def setupUi(self, MainWindow):
super().setupUi(MainWindow)
self.pushButton.clicked.connect(main)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
# ExampleWidget.py
from PyQt5 import QtCore, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
self.verticalLayout = QtWidgets.QVBoxLayout(Form)
self.verticalLayout.setObjectName("verticalLayout")
self.label = QtWidgets.QLabel(Form)
self.label.setObjectName("label")
self.verticalLayout.addWidget(self.label)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(("Form"))
self.label.setText(("It worked"))
def main():
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
您的代码有多个错误,您继承的类具有与父母相同的名称是不正确的。另一个错误是只能有一个Qapplication,因为它创建了GUI居住的循环,并且按下按钮并调用main()
时,您会创建另一个封锁初始循环的循环。
建议不要使用QT设计师生成的类,因为它不是小部件,我们无法处理某些事件,因此可以实现使用设计的小部件。
根据您的代码,我可以假设QT Designer生成的类是ui_mainwindow和ui_form,分别在文件explemainWindow和examplewidget中,以及UI文件夹中的两个。然后,您必须以以下方式实现类:
from PyQt5 import QtCore, QtGui, QtWidgets
from ui.ExampleWidget import Ui_Form
from ui.ExampleMainWindow import Ui_MainWindow
class Form(QtWidgets.QWidget, Ui_Form):
def __init__(self, *args, **kwargs):
QtWidgets.QWidget.__init__(self, *args, **kwargs)
self.setupUi(self)
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, *args, **kwargs):
QtWidgets.QMainWindow.__init__(self, *args, **kwargs)
self.setupUi(self)
self.pushButton.clicked.connect(self.onClicked)
def onClicked(self):
self.form = Form()
self.form.show()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())