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

标签 python pyqt anaconda pyqt5 spyder

我想我没有正确关闭 PyQT5 窗口。我正在使用与 anaconda 一起安装的 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()  

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

最佳答案

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

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()

关于python - 关闭 PyQT 窗口后无法杀死它。这需要我重新启动内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57408620/

相关文章:

python:如何拥有一个属性和一个setter函数来检测值发生的所有变化

python - 编辑 View 中的只读表单域 - Flask-Admin

python - 如何在 Windows 中使用 mrec?

windows - Python 事件

python - 使用Python对txt文件进行排序

python - 单击作为超链接的 QLabel 打开 .pdf

python - PyQt 中如何将按钮连接到具有特定参数的函数?

python - 如何使用Python/PyQT/Win32获取Windows任务栏的高度

python - Anaconda 4.0.2 是否已经在 MKL 上运行 numpy

anaconda - Jupyter 笔记本中的应用程序启动错误