PYQT从Qtdesigner生成的MainWindow打开一个新的窗口小部件



以下情况:

  • 我有一个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_())

相关内容

  • 没有找到相关文章

最新更新