【发布时间】:2018-05-12 16:23:40
【问题描述】:
情况如下:
- 我有一个 MainWindow 和一个 Widget
- MainWindow 和 Widget 是从 QtDesigner 创建的。
- 主窗口有一个可以打开小部件的按钮。
- 我通过
pyuic传递了*.ui文件,以便将它们转换为更加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()
【问题讨论】:
标签: python pyqt pyqt5 qwidget qt-designer