PyQt5 正确销毁一个程序
PyQt5 destroy a program properly
我正在使用 self.setWindowFlags(Qt.Tool)
隐藏任务栏上的应用程序。然而,我意识到即使我按下程序右上角的 x
,它仍然在后台显示 运行(我在任务 manager/processes 上看到它)。所以这意味着程序没有正确关闭。这是因为我使用 self.setWindowFlags(Qt.Tool)
吗?我该如何解决这个问题,那个标志选项隐藏了程序的图标,但即使我按 x
关闭程序,它仍然在后台 运行。
在 Qt 中,应用程序将继续 运行,直到主事件循环收到退出信号。在大多数应用程序中,这是在最后一个(或唯一一个)QMainWindow
被销毁时提供的(参见 QApp.setQuitOnLastWindowClosed()
)。
在 QMainWindow
上设置 Qt.Tool
标志会清除 WA_QuitOnClose
标志,这意味着关闭 window 将不再发出退出应用程序的信号。但是,您可以将此标志重新打开 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()
.
手动触发退出
我找到了解决方案,制作自己的退出按钮并连接如下信号
self.xbutton = QPushButton(self)
self.xbutton.setText("Quit")
self.xbutton.clicked.connect(self.close)
这会正确销毁应用程序。也可以使用 self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
而不是 Qt.Tool
我正在使用 self.setWindowFlags(Qt.Tool)
隐藏任务栏上的应用程序。然而,我意识到即使我按下程序右上角的 x
,它仍然在后台显示 运行(我在任务 manager/processes 上看到它)。所以这意味着程序没有正确关闭。这是因为我使用 self.setWindowFlags(Qt.Tool)
吗?我该如何解决这个问题,那个标志选项隐藏了程序的图标,但即使我按 x
关闭程序,它仍然在后台 运行。
在 Qt 中,应用程序将继续 运行,直到主事件循环收到退出信号。在大多数应用程序中,这是在最后一个(或唯一一个)QMainWindow
被销毁时提供的(参见 QApp.setQuitOnLastWindowClosed()
)。
在 QMainWindow
上设置 Qt.Tool
标志会清除 WA_QuitOnClose
标志,这意味着关闭 window 将不再发出退出应用程序的信号。但是,您可以将此标志重新打开 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()
.
我找到了解决方案,制作自己的退出按钮并连接如下信号
self.xbutton = QPushButton(self)
self.xbutton.setText("Quit")
self.xbutton.clicked.connect(self.close)
这会正确销毁应用程序。也可以使用 self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
Qt.Tool