如何从PyQt应用程序中完全控制Option / Alt键?

时间:2016-12-15 05:08:54

标签: python macos pyqt pyqt4 qtextedit

我正在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对象,然后根据键序列调用函数,其中一些将纯文本插回{通过直接调用其方法来对象{1}}。我编写了用于插入纯文本和处理由GorgTextEdit对象调用的shift和delete键的命令,其中目标窗口小部件(原始键序列的源)作为参数传递给这些函数。

问题在于,每当我按住选项键然后点击文本字符时,它会立即插入一个深奥的unicode字符,而不是等待来自我的Commander的操作。我希望我的选项键基本上映射到Meta - 我希望将M-x实现为Emacs样式命令调用。如果选项键导致OSX绕过我的代码并将字符直接插入到未经许可的任何文本窗口具有焦点,则此方法不起作用。现在Commander(选项x)插入M-x,即近似字符,这是我告诉它的。

是否有某种方法可以在Python中覆盖这些OSX文本插入功能?

1 个答案:

答案 0 :(得分:1)

您可能想要使用event filter(在小部件上,甚至是全局的)。