Python(QtDesigner)用按钮在mdiaea窗口中打开多个.py文件

2024-09-22 16:43:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我用QtDesigner创建了我所有的窗口,主窗口使用mdiArea,这样当调用时,其他窗口就可以放在它里面。我的主要问题是,当我关闭mdiArea内的一个窗口时,它会消失,我无法重新打开它,我要么希望窗口没有退出按钮,要么创建一个带有按钮的窗口,如果它不在那里,可以打开文件。在

输出屏幕截图

最小化的窗口是ValveSimulator,如果我关闭它,它就不存在了,我无法打开它

我的主要代码:CreateWindow用按钮创建窗口,CreateValveSimulator是我的主程序,当我关闭它时,我想从按钮打开它

from PyQt5 import QtCore, QtGui, QtWidgets, uic
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget,QWidget, QMdiSubWindow
import ValveSim
import MainWindow
import Window

class Win1(QMainWindow):
    def __init__(self):
        QWidget.__init__(self)
        self.vtn = MainWindow.Ui_MainWindow()
        self.vtn.setupUi(self)
        self.subwindow = QMdiSubWindow()
        self.CreateValveSimulator()
        self.CreateWindow()

    def CreateValveSimulator(self):
        widget = QMainWindow()
        self.VSim_subwindow = ValveSim.Ui_ValveSim()
        self.VSim_subwindow.setupUi(widget)
        self.subwindow = QMdiSubWindow(self.vtn.mdiArea)
        widget.setParent(self.subwindow)
        self.subwindow.setWidget(widget)
        self.vtn.mdiArea.addSubWindow(self.subwindow)
        widget.show()
        self.subwindow.show()
        self.subwindow.widget().show()

    def CreateWindow(self):
        widget = QMainWindow()
        self.win_subwindow = Window.Ui_MainWindow()
        self.win_subwindow.setupUi(widget)
        self.subwindow = QMdiSubWindow(self.vtn.mdiArea)
        widget.setParent(self.subwindow)
        self.subwindow.setWidget(widget)
        self.vtn.mdiArea.addSubWindow(self.subwindow)
        widget.show()
        self.subwindow.show()
        self.subwindow.widget().show()

if __name__=='__main__':
    app =QApplication(sys.argv)
    win = Win1()
    win.show()
    sys.exit(app.exec_())

我连接了自动按钮一个名为openvs的函数,我希望在关闭阀门模拟器窗口时打开它,如我的主代码所示,但是当我点击按钮时,它就会崩溃

带按钮代码的表格:

^{pr2}$

Tags: 代码importselfshowwidget按钮winqmainwindow
1条回答
网友
1楼 · 发布于 2024-09-22 16:43:31

您必须独立创建窗口,并将它们添加到每个QMdiSubWindow。当小部件显示在子窗口中时,这将导致子窗口被显示。要使用按钮正常打开,必须使用单击的信号并调用showNormal函数。在

完整的代码是here

class HomeWindow(QMainWindow, Ui_HomeWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent=parent)
        self.setupUi(self)


class ValveSim(QMainWindow, Ui_ValveSim):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent=parent)
        self.setupUi(self)


class Win1(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent=parent)
        self.setupUi(self)
        self.vs = ValveSim()
        self.hw = HomeWindow()
        self.CreateValveSimulator()
        self.CreateWindow()

    def CreateValveSimulator(self):
        subwindow = QMdiSubWindow()
        subwindow.setWidget(self.vs)
        self.mdiArea.addSubWindow(subwindow)
        subwindow.setFixedSize(500, 500)
        # self.subwindow.close()

    def CreateWindow(self):
        self.hw.pushButton.clicked.connect(self.vs.showNormal)
        subwindow = QMdiSubWindow()
        subwindow.setWindowFlags(Qt.CustomizeWindowHint | Qt.Tool)
        subwindow.setWidget(self.hw)
        self.mdiArea.addSubWindow(subwindow)

相关问题 更多 >