我正在pyqt中创建一个文本编辑器。我想完全独自处理所有键盘输入,因此我在QTextEdit
类中重新完成了事件处理程序,例如:
class GorgTextEdit(QtGui.QTextEdit):
# customized QTextEdit class with reimplemented event handles
gorg_key_press_signal = pyqtSignal(str, int, QtGui.QWidget)
gorg_key_release_signal = pyqtSignal(str, int, QtGui.QWidget)
def __init__(self):
super(GorgTextEdit, self).__init__()
def keyPressEvent(self, e):
self.gorg_key_press_signal.emit("p", e.key(), self)
def keyReleaseEvent(self, e):
self.gorg_key_release_signal.emit("r", e.key(), self)
基本上,我将GorgTextEdit
中每个关键事件的信号直接发送到Commander
对象,然后根据密钥序列调用函数,其中一些通过直接调用其方法将纯文本插入GorgTextEdit
对象。我编写了用于插入纯文本的命令,并用于处理由Commander
对象调用的移位和删除键,而目标窗口小部件(原始密钥序列的源)将这些函数作为参数传递到这些函数中。
问题是,每当我按下选项键,然后点击文本字符时,它立即插入深奥的Unicode字符,而不是等待指挥官的操作。我希望我的选项键基本上映射到meta-我希望将M -X作为Emacs样式命令调用。如果选项键使OSX绕过我的代码并将字符直接插入未经许可的任何文本窗口中,则无效。目前M-x
(选项X)插入≈
,近似字符,这是我所告诉它的任何事情。
是否有某种方法可以从Python中覆盖这些OSX文本插入功能?
您可能需要使用事件过滤器(在小部件上,甚至是全局一个)。