【发布时间】:2019-10-03 03:19:20
【问题描述】:
我想从我的 Index.py 页面中多次打开 Form.py 页面。 当我第二次尝试打开表单时,第一个表单页面关闭。
有我的 Index.py 代码:
from PyQt5 import QtCore, QtGui, QtWidgets
from Form import Ui_FormWindow
class Ui_MainWindow(object):
#The function to open the Form.py
def open(self):
self.window = QtWidgets.QMainWindow()
self.ui = Ui_FormWindow()
self.ui.setupUi(self.window)
self.window.show()
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(230, 180, 93, 28))
self.pushButton.setObjectName("pushButton")
self.pushButton.clicked.connect(self.open)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
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_())
这是我要多次打开的页面,Form.py:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_FormWindow(object):
def setupUi(self, FormWindow):
FormWindow.setObjectName("FormWindow")
FormWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(FormWindow)
self.centralwidget.setObjectName("centralwidget")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(250, 190, 113, 22))
self.lineEdit.setObjectName("lineEdit")
FormWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(FormWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
self.menubar.setObjectName("menubar")
FormWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(FormWindow)
self.statusbar.setObjectName("statusbar")
FormWindow.setStatusBar(self.statusbar)
self.retranslateUi(FormWindow)
QtCore.QMetaObject.connectSlotsByName(FormWindow)
def retranslateUi(self, FormWindow):
_translate = QtCore.QCoreApplication.translate
FormWindow.setWindowTitle(_translate("FormWindow", "FormWindow"))
self.lineEdit.setText(_translate("FormWindow", "Page to open"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
FormWindow = QtWidgets.QMainWindow()
ui = Ui_FormWindow()
ui.setupUi(FormWindow)
FormWindow.show()
sys.exit(app.exec_())
我检查了这个answer,但我不明白如何让它在我的代码中工作。 我还编辑了我的问题,以便成为一个最小的可重复示例,但我的英语并不完美,我担心不能完全理解我在 mre tutotial 上读到的内容,所以很抱歉
【问题讨论】:
-
@eyllanesc 我添加了更多代码,我不知道该提供什么
-
你读过它是一个 MRE 吗?如果你需要帮助提供它,你的代码不是这样的,当你让我知道时
-
@eyllanesc 完成了,但我的英语不是很好,我不知道我是否完全理解如果它不是你想要的那么抱歉
-
1) 在 Index.py 的
setupUi()中添加self.ws = []2) 更改为def open(self): w = QtWidgets.QMainWindow() ui = Ui_FormWindow() ui.setupUi(w) w.show() self.ws.append(w) self.window.show()