Я работал над 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()