PyQt5 Завершить приложение, не нажимая ни одной кнопки или ничего не нажимая - PullRequest
0 голосов
/ 17 июня 2020
import sys
from PyQt5.QtWidgets import (QMainWindow, QLabel, QGridLayout, qApp,
                             QApplication, QWidget, QPushButton)
from PyQt5.QtCore import QSize, Qt   

class HelloWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Hello world") 

        centralWidget = QWidget()          
        self.setCentralWidget(centralWidget)   

        title = QLabel("Hello World from PyQt") 
        title.setAlignment(Qt.AlignCenter) # <---

        gridLayout = QGridLayout(centralWidget)          
        gridLayout.addWidget(title,  0, 0)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    mainWin = HelloWindow()
    mainWin.show()
    mainWin.close()
    app.quit()
    sys.exit( app.exec_() )

Я хочу, чтобы приложение закрывалось «автоматически» (без нажатия какой-либо кнопки или нажатия «x»). Я пробовал close() и app.quit(), но он просто закрывает окно. Приложение все еще работает. Не могли бы вы помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 20 июня 2020

Думаю, я нашел решение. Изменение кода таким образом дает желаемый ответ



import sys
from PyQt5.QtWidgets import (QMainWindow, QLabel, QGridLayout, qApp,
                             QApplication, QWidget, QPushButton)
from PyQt5.QtCore import QSize, Qt   

class HelloWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Hello world") 

        centralWidget = QWidget()          
        self.setCentralWidget(centralWidget)   

        title = QLabel("Hello World from PyQt") 
        title.setAlignment(Qt.AlignCenter) # <---

        gridLayout = QGridLayout(centralWidget)          
        gridLayout.addWidget(title,  0, 0)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    mainWin = HelloWindow()
    mainWin.show()
    timer = QTimer()
    timer.timeout.connect(lambda: app.quit())
    timer.start(100)
    sys.exit( app.exec_() )

Проблема здесь в том, что у нас еще нет настроенных событий Python. Таким образом, наше событие l oop никогда не обрабатывает интерпретатор Python, и поэтому наш сигнал, доставленный процессу Python, никогда не обрабатывается. Следовательно, наш процесс Python никогда не увидит сигнал, пока мы не нажмем кнопку выхода в окне приложения Qt. (источник: https://machinekoder.com/how-to-not-shoot-yourself-in-the-foot-using-python-qt/)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...