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

问题描述 投票:0回答:1

我想我没有正确关闭PyQT5窗口。我正在使用随蟒蛇安装的spyder(3.3.5)来编程pyqt5程序。我正在使用qt creator设计我的ui文件,我使用pyqt包中的loadUi函数加载了该文件。使用该代码,一切正常,直到需要关闭它为止。我通过关闭按钮(右上角的x按钮)关闭窗口。窗口本身是关闭的,但似乎控制台(或外壳)卡住了,并且我不能给它进一步的命令或重新运行程序,而不必重新启动内核(完全关闭我的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()  

[如果有人有任何建议,我会很高兴听到他们的建议。

python pyqt anaconda pyqt5 spyder
1个回答
0
投票

对我来说,它有助于删除'app.exec_()'命令。但随后在运行代码时立即关闭。为了使窗口保持打开状态,我需要将MainWindow实例返回到全局范围(或​​使其成为全局对象)。我的代码如下:

from PyQt5 import QtWidgets, uic
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()
© www.soinside.com 2019 - 2024. All rights reserved.