如何从PYQT应用程序中完全控制选项/ALT键



我正在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文本插入功能?

您可能需要使用事件过滤器(在小部件上,甚至是全局一个)。

最新更新