PyQt5点击登录按钮窗口瞬关(调试模式正常)问题求助
PyQt5 界面闪瞬即关问题解决
我用PyQt5开发项目,逻辑是点击登录按钮(pushButton)后跳转到WelcomeScreen界面。但点击按钮后WelcomeScreen仅闪瞬即关,程序却仍在运行;奇怪的是调试模式下该界面可正常打开。已尝试过在open_welcome_screen方法中返回myWelcomewin等方案,当前使用PyCharm开发,相关代码如下:
import sys from PyQt5.QtCore import QTimer from PyQt5.uic import loadUi from frontend import WelcomeScreen from LoginForm import Ui_SVA from WelcomeScreen import Ui_WelcomeScreen from PyQt5.QtWidgets import QMainWindow, QApplication, QDialog import os from os import path import sqlite3 class WelcomeWindow(QDialog, Ui_WelcomeScreen): def __init__(self): super(WelcomeWindow, self).__init__() loadUi('WelcomeScreen.ui', self) class MainWindow(QDialog, Ui_SVA): def __init__(self): super(MainWindow, self).__init__() loadUi('LoginForm.ui', self) # Connect button clicked signal to slot self.pushButton.clicked.connect(self.open_welcome_screen) def open_welcome_screen(self): # Hide the login screen self.hide() myWelcomewin = WelcomeWindow() myWelcomewin.show() myWelcomewin.raise_() if __name__ == '__main__': app = QApplication(sys.argv) myWin = MainWindow() myWin.show() sys.exit(app.exec_())
问题原因
myWelcomewin是open_welcome_screen方法内的局部变量,方法执行完成后,Python的垃圾回收机制会销毁这个变量,关联的界面也就被关闭了。调试模式下垃圾回收触发时机不同,所以界面能正常显示。
修复方法
将myWelcomewin改为MainWindow类的实例属性,让它被MainWindow实例持有,避免方法结束后被回收:
修改open_welcome_screen方法:
def open_welcome_screen(self): # Hide the login screen self.hide() self.myWelcomewin = WelcomeWindow() self.myWelcomewin.show() self.myWelcomewin.raise_()
另外,代码中同时导入了from frontend import WelcomeScreen和from WelcomeScreen import Ui_WelcomeScreen,如果前者未被使用,建议删除以避免模块混淆。
内容的提问来源于stack exchange,提问作者Dragut
相关产品推荐
相关产品推荐

