PyQt5 уничтожить программу правильно

Я использую self.setWindowFlags(Qt.Tool) скрыть приложение на панели задач. Тем не менее, я понял, что даже я нажимаю x в правом верхнем углу программы она все еще работает в фоновом режиме (я вижу это в диспетчере задач / процессах). Так что это означает, что программа не закрывается должным образом. Это потому что я использую self.setWindowFlags(Qt.Tool)? Как я могу это исправить, эта опция флага скрывает значок программы, но даже если я нажимаю x чтобы закрыть программу, она все еще работает в фоновом режиме.

2 ответа

Решение

Я нашел решение, сделайте свою собственную кнопку выхода и подключите сигнал, как показано ниже

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

Это уничтожит приложение правильно. Также вместо Qt.Tool использование self.setWindowFlags(QtCore.Qt.FramelessWindowHint)

В Qt приложение будет продолжать работать до тех пор, пока главный цикл обработки событий не получит сигнал на выход. В большинстве приложений это предусмотрено, когда последний (или единственный) QMainWindow уничтожен (см. QApp.setQuitOnLastWindowClosed()).

Настройка Qt.Tool флаг на QMainWindow очищает WA_QuitOnClose флаг означает, что закрытие окна больше не будет сигнализировать о выходе из приложения. Однако вы можете снова включить этот флаг, как описано в этом посте на форуме Qt.

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

Кроме того, вы также можете запустить выход вручную, используя QApp.quit(),

Другие вопросы по тегам