PyQt5:切换到新窗口时使用DeleteOnClose

2024-09-30 01:26:40 发布

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

我目前正在Python3.7中创建GUI,在Spyder环境中使用PyQt5和Qt设计器。GUI有许多不同的窗口。基本上,我从UI_开始窗口开始,然后在按下按钮时打开下一个窗口。GUI工作正常,但是在大约50个窗口之后,程序突然不再显示下一个窗口,也不会停止执行。这个问题的奇怪之处在于:

  1. 完全相同的窗口类之前已经被调用过很多次,而且从来没有出现过任何问题
  2. 问题不仅发生在一个窗口上,也可能发生在另一个窗口类上(但在显示相同数量的窗口之后)

我试图找出.show()命令突然不再工作的原因。我使用打印语句来查看程序“故障”的位置。我看到,即使是.show()命令之后的print语句也在工作,但由于没有显示窗口,我无法按任何按钮触发下一个事件。所以基本上程序是挂起的

我对Python编程和创建GUI比较陌生,但我认为问题可能是由于内存泄漏造成的。这就是为什么我现在试图在使用self.setAttribute(QtCore.Qt.WA_DeleteOnClose,True)关闭窗口时打开内存空间。然而,现在我面临的问题是,下一个窗口不再显示。那么,如果我想在以后显示一个新窗口,如何使用DeleteOnClose呢

另外,如果有人对原始问题有建议,请让我知道。大约一个星期以来,我一直在努力想办法解决这个问题,但没有进一步的进展

已经谢谢你了

我的代码的某些部分需要使用:

class UI_Start(QtWidgets.QMainWindow):
    def __init__(self):
        super(UI_Start, self).__init__() # Call the inherited classes __init__ method
        uic.loadUi('Screen_Start.ui', self) # Load the .ui file
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)   # added newly
        self.Start_pushButton_Start.clicked.connect(self.openKommiScreen)
        
        
    def openKommiScreen(self):
        self.close()
        self.KommiScreen = UI_Kommi(self)  
        
        
class UI_Kommi(QtWidgets.QMainWindow):  
    def __init__(self, parent = None):
        super(UI_Kommi, self).__init__(parent)
        uic.loadUi('Screen_Kommi.ui', self)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
        global sheetNo
        sheetNo = 1
        self.WeiterButton = self.findChild(QtWidgets.QPushButton,'pushButton_Weiter')
        self.WeiterButton.clicked.connect(self.openScanScreen)
        self.show()
        
        
    def openScanScreen(self):
        self.close()
        self.ScanScreen = UI_Scan(self)

if __name__ == '__main__':   
    app = QtWidgets.QApplication(sys.argv)
    window = UI_Start()
    window.show()
    sys.exit(app.exec_())

Tags: self程序uiinitdefshowguiqt

热门问题