【问题标题】:How I reopen a window using pyqt?如何使用 pyqt 重新打开一个窗口?
【发布时间】:2020-12-21 10:52:27
【问题描述】:

我使用 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(),否则我无法返回同一个窗口,只能在旧窗口仍然存在于后台时打开一个新窗口。

如何在不同的窗口中移动而不导致程序崩溃?

【问题讨论】:

标签: python pyqt pyqt5


【解决方案1】:

我使用 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。

【讨论】:

  • 谢谢,但它仍然无法正常工作,我创建了 Qtimer,在第二个窗口中我这样做了:def btn_back_clicked(self): global status status = False self.window = QtWidgets.QMainWindow() self.ui = Ui_ResearchMenu() self.ui.setupUi(self.window) self.window.show() EditNewResearch.hide() 当我按下后退按钮时,应用程序崩溃并且python停止工作。
  • 看不到完整代码就找不到错误。如果您有任何 git 存储库,请将您的代码示例上传到其中并在您的问题中分享。
猜你喜欢
  • 2016-08-14
  • 2012-10-17
  • 1970-01-01
  • 2015-11-18
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
  • 2020-03-19
相关资源
最近更新 更多