首页 > 解决方案 > PyQt5 GUI 无法从 Spyder 关闭

问题描述

我正在尝试使用 PyQt5 创建一个简单的 GUI。我在 Spyder(Anaconda 最新版本,python 3.7)的 Windows 10 中运行我的代码。这是我的代码:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot

class App(QWidget):

    def __init__(self):
        super().__init__()
        self.title = 'PyQt5 button test'
        self.left = 50
        self.top = 50
        self.width = 720
        self.height = 800
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        button = QPushButton('PyQt5 button', self)
        button.setToolTip('This is an example button')
        button.move(100,70)
        button.clicked.connect(self.on_click)

        self.show()

    @pyqtSlot()
    def on_click(self):
        print('PyQt5 button click')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    app.exec_()

弹出一个窗口。现在,如果我通过单击关闭按钮(GUI 的右上角)关闭 GUI,Spyder IP 控制台不会恢复正常状态。它冻结了。我应该在代码中使用什么来解决问题?

谢谢,莫尼

标签: pythonuser-interfacepyqt5spyder

解决方案


关闭窗口似乎不会关闭 QApplication 对象。为此,通过在 on_Click 定义之后添加这两行来覆盖主窗口的 closeEvent 函数

  def closeEvent(self,event):
     QApplication.quit()

这将关闭窗口和 QApplication 对象以及控制应该返回到控制台


推荐阅读