关闭QMainWindow的QAction行为仅在IPython中不一致

时间:2019-03-26 20:05:01

标签: python python-3.x pyqt ipython pyqt5

我想要一个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中运行它时,可能会发生以下行为之一:

  1. 一切正常。

  2. 退出时,窗口不会关闭。

  3. 退出时,窗口不会关闭,IPython退出。

  4. 在启动时,警告开始出现在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位。

0 个答案:

没有答案