如何使用pyqt重新打开窗口?

2024-10-03 13:22:09 发布

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

我使用qtgenerator创建了几个窗口,并使用这种插槽隐藏当前窗口并显示另一个窗口:

SearchResearchScreen.py

class Ui_ResearchMenu(object):

    def setupUi(self, ResearchMenu):
        ...
    def retranslateUi(self, ResearchMenu):
        ...

    def edit_clicked1(self):
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui_EditNewResearch()
        self.ui.setupUi(self.window)
        self.window.show()
        ResearchMenu.hide()
        self.timer = QtCore.QTimer()
        self.timer.setInterval(100)
        self.timer.timeout.connect(self.checkVar)
        self.timer.start()

EditresearchScreen.py-

class Ui_EditNewResearch(object):

    def setupUi(self, EditNewResearch):
      ...
    def retranslateUi(self, EditNewResearch):
      ...

    def btn_Cancel_clicked(self):
        global status
        status = False
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui_ResearchMenu()
        self.ui.setupUi(self.window)
        self.window.show()
        EditNewResearch.hide()

当点击一个按钮时,这可以正常工作,之后,在第二个窗口中,我使用相同的代码返回第一个窗口,但应用程序崩溃。除非我对.hide()进行注释,否则我无法返回到同一个窗口,而是在旧窗口仍然存在于后台时打开一个新窗口

如何在程序不崩溃的情况下通过不同的窗口


Tags: pyselfuiobjectdefwindowclasshide
1条回答
网友
1楼 · 发布于 2024-10-03 13:22:09

我使用QTimer解决了这个问题。您应该在第一个窗口中使用QTimer,该窗口将不断检查您将在这两种情况下更新的任何全局变量

创建如下QTimer:-

def edit_clicked1(self):
    global status
    status = True # This will be your global variable which will check if the window is closed or not
    self.window = QtWidgets.QMainWindow()
    self.ui = Ui_EditNewResearch()
    self.ui.setupUi(self.window)
    self.window.show()
    ResearchMenu.hide()
    self.timer = QTimer()
    self.timer.setInterval(100)
    self.timer.timeout.connect(self.checkVar)
    self.timer.start()

并检查是否存在这样的变量

def checkVar(self):
    global status
    if status == False:
        # Show your hided window here
        self.show()

请记住,在关闭第二个窗口时,需要将这个status变量设置为False

相关问题 更多 >