我想要一个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 shell中。更多出现 与应用程序交互时。这些警告首次出现后, 它们将出现在随后的每次发射中 直到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.
我的环境:Windows 10上的Python 3.7.2 64位。