PyQt5正确地破坏了一个程序

时间:2016-06-02 15:44:44

标签: python pyqt5

我正在使用self.setWindowFlags(Qt.Tool)隐藏任务栏上的应用程序。但是,我意识到即使我按下程序右上角的x,它仍然在后台运行(我在任务管理器/进程上看到它)。这意味着程序无法正常关闭。这是因为我使用self.setWindowFlags(Qt.Tool)吗?如何修复此问题,该标记选项隐藏程序的图标,但即使我按x关闭程序,它仍然在后台运行。

2 个答案:

答案 0 :(得分:0)

在Qt中,应用程序将继续运行,直到主事件循环收到要退出的信号。在大多数应用程序中,这是在最后一个(或仅)QMainWindow被销毁时提供的(参见QApp.setQuitOnLastWindowClosed())。

Qt.Tool上设置QMainWindow标志会清除WA_QuitOnClose标志,这意味着关闭窗口将不再发出退出应用程序的信号。但是,您可以在as described in this post on the Qt forum上重新打开此标记。

window = QMainWindow(None, Qt.Tool)
window.show() # must be called before setting Qt::WA_QuitOnClose
window.setAttribute(Qt.WA_QuitOnClose)

或者,您也可以使用QApp.quit()手动触发退出。

答案 1 :(得分:0)

我找到了解决方案,自行退出按钮并连接如下信号

self.xbutton = QPushButton(self)
self.xbutton.setText("Quit")
self.xbutton.clicked.connect(self.close)

这会正确破坏应用程序。而不是Qt.Tool使用self.setWindowFlags(QtCore.Qt.FramelessWindowHint)