我想我没有正确关闭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()
[如果有人有任何建议,我会很高兴听到他们的建议。
对我来说,它有助于删除'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()