我试图做一些非常简单的事情:添加一个带有Exit
操作的菜单栏,当选中它时,它将关闭QMainWindow
。但是,当我实际单击Exit
时,它不会关闭应用程序。SSCCE:
from PyQt4 import QtGui, QtCore
import sys
class Window(QtGui.QMainWindow):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
widget = QtGui.QWidget()
self.setCentralWidget(widget)
self.menu_bar = QtGui.QMenuBar(self)
menu = self.menu_bar.addMenu('File')
exit_action = QtGui.QAction('Exit', self)
exit_action.triggered.connect(lambda:
self.closeEvent(QtGui.QCloseEvent()))
menu.addAction(exit_action)
self.setMenuBar(self.menu_bar)
def closeEvent(self, event):
print('Calling')
print('event: {0}'.format(event))
event.accept()
app = QtGui.QApplication(sys.argv)
form = Window()
form.show()
sys.exit(app.exec_())
真正让我困惑的是,当我从File
菜单中单击Exit
时,我得到以下输出:
Calling
event: <PyQt4.QtGui.QCloseEvent object at 0x024B7348>
并且应用程序不退出。在
如果我单击右上角X
,我得到相同的结果(直到事件对象的相同内存地址):
Calling
event: <PyQt4.QtGui.QCloseEvent object at 0x024B7348>
应用程序确实退出。在
这是在Windows7 64位、Python2.7.2、PyQt 4.8.6上实现的。在
文档says
您可以直接用信号关闭而不是
QCloseEvent
呼叫,请致电self.close()
。在关闭事件实际上并不会使窗口关闭,它只是在窗口已经关闭时触发的。要真正关闭窗口,需要调用
self.close()
,这将产生触发QCloseEvent
的副作用。所以简单地使用这个:documentation of ^{} 描述了}之间的交互作用:
close
和{相关问题 更多 >
编程相关推荐