如何在 Mac OSX 的 pyqt 应用程序中停用命令 + Q 键?
Posted
技术标签:
【中文标题】如何在 Mac OSX 的 pyqt 应用程序中停用命令 + Q 键?【英文标题】:How to de-activate command + Q key in pyqt application in Mac OSX? 【发布时间】:2013-07-30 13:36:27 【问题描述】:当我在 Mac OSX 中按 (command + q) 键时,我的 PyQt 应用程序关闭。
(即)我的应用收到类似于在窗口中按 (Alt +F4) 键的关闭事件
但是我怎样才能禁用这种类型的关闭事件,它是 mac 原生关闭键盘快捷键。
以下是我希望我的 qmainwindow 不应接收关闭事件的示例 pyqt 代码。
#! /usr/bin/python
import sys
import os
from PyQt4 import QtGui
class Notepad(QtGui.QMainWindow):
def __init__(self):
super(Notepad, self).__init__()
self.initUI()
def initUI(self):
self.setGeometry(300,300,300,300)
self.setWindowTitle('Notepad')
self.show()
self.raise_()
#def keyPressEvent(self, keyEvent):
# print(keyEvent,'hi')
# print('close 0', keyEvent.InputMethod)
# if keyEvent.key() != 16777249:
# super().keyPressEvent(keyEvent)
# else:
# print(dir(keyEvent))
# return False
def closeEvent(self, event):
reply = QtGui.QMessageBox.question(self, 'Message',
"Are you sure to quit?", QtGui.QMessageBox.Yes |
QtGui.QMessageBox.No, QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
event.accept()
else:
event.ignore()
def main():
app = QtGui.QApplication(sys.argv)
notepad = Notepad()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
???
【问题讨论】:
无法通过覆盖 qmainwindow 小部件的 keypressevent 函数来忽略。 【参考方案1】:扩展QtGui.QApplication::events()方法接收这个命令+q关闭事件并忽略它。
下面是我实现它的示例代码。
def main():
app = Application()
notepad = Notepad()
sys.exit(app.exec_())
class Application(QtGui.QApplication):
def event(self, event):
# Ignore command + q close app keyboard shortcut event in mac
if event.type() == QtCore.QEvent.Close and event.spontaneous():
if sys.platform.startswith('darwin'):
event.ignore()
return False
谢谢大家
【讨论】:
以上是关于如何在 Mac OSX 的 pyqt 应用程序中停用命令 + Q 键?的主要内容,如果未能解决你的问题,请参考以下文章