PyQt5界面代码在Spyder中运行无报错但无输出的问题求助
嘿,我一眼就瞅出问题啦!你的代码逻辑其实没毛病,但有个极易忽略的小细节——创建的Window实例没有被任何变量引用,刚生成就被Python的垃圾回收机制给销毁了,所以界面连闪一下的机会都没有就没了😅
问题根源
在你的run()函数里,你只写了Window()来创建窗口实例,但没有把它赋值给变量。Python的垃圾回收规则是:如果一个对象没有被任何变量持有引用,就会被立即回收释放内存。你的窗口刚初始化完成,还没来得及正常显示就被回收了,自然看不到界面。
修复方案
只需要给窗口实例加个变量引用就行,比如window = Window(),这样它就有了“归属”,不会被轻易回收:
import sys from PyQt5 import QtGui,QtCore from PyQt5.QtWidgets import QPushButton,QApplication,QMainWindow class Window(QMainWindow): def __init__(self): super().__init__() self.setGeometry(50,50,500,300) self.setWindowTitle("PyQt!") self.show() if __name__ == "__main__": def run(): App=QApplication(sys.argv) # 给实例赋值变量,保留引用 window = Window() App.exec() run()
额外优化小建议
其实你完全可以不用嵌套run()函数,直接写更简洁直观的代码,还能保证程序退出时正确清理资源:
import sys from PyQt5.QtWidgets import QPushButton, QApplication, QMainWindow class Window(QMainWindow): def __init__(self): super().__init__() self.setGeometry(50, 50, 500, 300) self.setWindowTitle("PyQt!") self.show() if __name__ == "__main__": App = QApplication(sys.argv) window = Window() # 用sys.exit包裹,确保程序退出时释放所有资源 sys.exit(App.exec())
内容的提问来源于stack exchange,提问作者Syd Xyn
相关产品推荐
相关产品推荐

