2016-12-15 64 views
2

我在PyQt中創建一個文本編輯器。我想完全處理我自己所有的鍵盤輸入,所以我已經重新實現事件處理在我QTextEdit類,像這樣:如何從PyQt應用程序中完全控制Option/Alt鍵?

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直接發送信號到然後根據鍵序列調用函數,其中一些通過直接調用其方法將純文本插入到GorgTextEdit對象中。我編寫了用於插入純文本和處理由Commander對象調用的移位和刪除鍵的命令,其中目標小部件(原始鍵序列的來源)作爲參數傳遞到這些函數中。

問題是每當我按住選項鍵,然後打一個文本字符,它立即插入一個深奧的unicode字符,而不是等待來自我的指揮官的行動。我希望我的選項鍵基本上映射到Meta - 我希望將M-x用作Emacs樣式的命令調用。如果選項鍵導致OSX繞過我的代碼並將字符直接插入任何文本窗口未經許可的焦點,這不起作用。現在M-x(選項x)插入,近似字符,這是我沒有告訴它做的。

是否有一些方法可以從Python內覆蓋這些OSX文本插入功能?

回答

1

您可能想要使用event filter(無論是在窗口小部件上,還是在全局窗口上)。

相關問題