关闭PyQT窗口后无法关闭它。这需要我重新启动内核

2024-04-25 14:55:41 发布

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

我想我没有正确关闭PyQT5窗口。我正在使用spyder(3.3.5),我已经安装了anaconda,以编程pyqt5程序。我使用qt creator来设计我的ui文件,我使用pyqt包中的loadUi函数加载该文件。代码一切正常,直到我需要关闭它。我通过关闭按钮(右上角的x按钮)关闭窗口。窗口本身是关闭的,但似乎控制台(或shell)卡住了,我不能给它进一步的命令或重新运行程序,而不必重新启动内核(完全关闭我的IDE并重新打开它)。在

我试着在互联网上寻找解决这个问题的办法,但似乎没有一个对我有效。包括将IPython控制台的图形更改为自动。在

编辑:还创建了一个问题: https://github.com/spyder-ide/spyder/issues/9991

import sys
from PyQt5 import QtWidgets,uic
from PyQt5.QtWidgets import QMainWindow
class Mic_Analysis(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.ui=uic.loadUi("qt_test.ui",self)
...
if __name__ == "__main__":
    def  run_app():
        if not QtWidgets.QApplication.instance():        
            app = QtWidgets.QApplication(sys.argv)
        else:
            app=QtWidgets.QApplication.instance()
        mainWin=Mic_Analysis()
        mainWin.show()
        app.exec_()
    run_app()  

如果有人有什么建议的话,我很乐意听到。在


Tags: 文件fromimportself程序appuisys
1条回答
网友
1楼 · 发布于 2024-04-25 14:55:41

对我来说,这有助于消除应用程序执行_()'命令。 但是当运行代码时,它会立即关闭。为了使窗口保持打开状态,我需要将主窗口实例返回到全局范围(或使其成为全局对象)。我的代码如下:

from PyQt5 import QtWidgets
import sys

def main():
    if not QtWidgets.QApplication.instance():
        app = QtWidgets.QApplication(sys.argv)
    else:
        app = QtWidgets.QApplication.instance()
    main = MainWindow()
    main.show()

    return main

if __name__ == '__main__':         
    m = main()

相关问题 更多 >