[英]PyQt opening a new Windowed Widget from a MainWindow generated from QtDesigner
情況如下:
pyuic
傳遞了*.ui
文件,以使它們變成更加pythonic的形式。 當我點擊MainWindow中的按鈕時,最終目標是讓Widget出現在一個新窗口中,但是窗口關閉時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 Designer生成的類,因為它不是小部件,我們無法處理某些事件,所以適合實現使用該設計的小部件。
根據你的代碼,我可以假設Qt Designer生成的類是Ui_MainWindow和Ui_Form,它們分別位於文件ExampleMainWindow和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_())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.