PyQt5: QApplication.quit () проблема - оставшееся событие - PullRequest
0 голосов
/ 06 января 2020

Я работал над GUI с Qt Designer. Как и раньше, у меня были некоторые проблемы, не убивавшие мое ядро ​​Python. Структура теперь работает за исключением некоторого события, которое не очищается QApplication.quit (), как я ожидал. Это происходит только в том случае, если приложение закрывается через меню, запускающее функцию closeFromMenu, которая затем запускает closeEvent. Если он закрывается крестиком, код сразу переходит на closeEvent, и после повторного открытия приложения не остается никаких событий. Это то, что возвращает Qt после перезапуска приложения, если оно закрывается с помощью функции closeFromMenu:

QWindowsContext :: windowsPro c: Окно Qt не найдено для события 0x1c (WM_ACTIVATEAPP), hwnd = 0x0x2506f4. QWindowsContext :: windowsPro c: Окно Qt не найдено для события 0x2a3 (WM_MOUSELEAVE), hwnd = 0x0x2506f4. QApplication :: regClass: регистрация класса окна 'Qt5QWindowPopupDropShadowSaveBits' завершилась неудачно. (Класс уже существует.) QWindowsContext :: windowsPro c: Окно Qt не найдено для события 0x1c (WM_ACTIVATEAPP), hwnd = 0x0x2506f4.

Я также пробовал другую версию closeFromMenu:

def closeFromMenu(self):
    QtWidgets.QApplication.quit()

Создание тех же самых проблем остатка события. Кто-нибудь сталкивался с такой же проблемой? Файл GUI ui в значительной степени пуст, за исключением меню. Любая помощь приветствуется.

Python 3.7 с использованием pyzo на windows машине PyQt5

import sys
import os
from PyQt5 import QtWidgets
from PyQt5 import QtCore
from PyQt5 import QtGui
from PyQt5 import uic

path = "foo"
qtCreatorFile = "MainWindow.ui" 

Ui_MainWindow, QtBaseClass = uic.loadUiType(path + qtCreatorFile)

class MyApp(QtWidgets.QMainWindow, Ui_MainWindow): #gui class
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.actionExit.triggered.connect(self.closeFromMenu)

    def closeFromMenu(self):
        self.close()

    def closeEvent(self, event):
        reply = QtWidgets.QMessageBox.question(self, 'Message',
            "Are you sure to quit?", QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No)

        if reply == QtWidgets.QMessageBox.Yes:
            event.accept()
            QtWidgets.QApplication.quit()
        else:
            event.ignore()



if __name__ == "__main__":
    app = None
    def run_app():
        if not QtWidgets.QApplication.instance():
            app = QtWidgets.QApplication(sys.argv)
        else:
            app = QtWidgets.QApplication.instance()
        mainWin = MyApp()
        mainWin.show()
        app.exec_()
    run_app()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...