我目前正在Python3.7中创建GUI,在Spyder环境中使用PyQt5和Qt设计器。GUI有许多不同的窗口。基本上,我从UI_开始窗口开始,然后在按下按钮时打开下一个窗口。GUI工作正常,但是在大约50个窗口之后,程序突然不再显示下一个窗口,也不会停止执行。这个问题的奇怪之处在于:
我试图找出.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_())
起初我猜这是一个垃圾收集问题。对新窗口的唯一引用存储在上一个窗口中。它已被删除,因此不再引用窗口对象,python可能会自动删除它
在这些情况下,我经常使用全局变量来存储当前的windows引用
相关问题 更多 >
编程相关推荐