Мне нужно QMainWindow, которое пользователь может закрыть: щелкнув по кнопке закрытия окна, щелкнув по элементу в меню или используя сочетание клавиш.Это мое решение:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import (QAction, qApp, QApplication, QMainWindow)
class Window(QMainWindow):
'''A simple window'''
def __init__(self):
super().__init__()
self.make_gui()
def make_gui(self):
'''Create main GUI window'''
self.menuBar()
self.statusBar()
exitAction = QAction(QIcon(None), 'Exit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('Exit application')
exitAction.triggered.connect(qApp.quit)
fileMenu = self.menuBar().addMenu('Actions')
fileMenu.addAction(exitAction)
self.show()
if __name__ == '__main__':
APP = QApplication([])
GUI1 = Window()
sys.exit(APP.exec_())
Когда я запускаю этот код с python, это работает каждый раз, независимо от того, какое из трех действий используется для закрытия окна.Когда я запускаю его в IPython, может произойти одно из следующих действий:
Все работает как положено.
При выходе окно не отображаетсязакрыть.
При выходе окно не закрывается, и IPython завершается.
При запуске начинают появляться предупреждения в оболочке IPython,Больше появляются при взаимодействии с приложением.После появления этих предупреждений они будут появляться при каждом последующем запуске до перезапуска IPython.
Примеры предупреждений:
QWindowsContext::windowsProc: No Qt Window found for event 0x1c (WM_ACTIVATEAPP), hwnd=0x0xb0dd8.
QWindowsContext::windowsProc: No Qt Window found for event 0x2a3 (WM_MOUSELEAVE), hwnd=0x0xb0dd8.
QWindowsContext::windowsProc: No Qt Window found for event 0x24a (WM_POINTERLEAVE), hwnd=0x0xb0dd8.
QWindowsContext::windowsProc: No Qt Window found for event 0x1c (WM_ACTIVATEAPP), hwnd=0x0xb0dd8.
Моя среда: Python 3.7.2 64-бит в Windows 10.