2009-11-09 95 views
2

我有這樣的代碼:當按下按鍵最爲什麼按下回車鍵不會在我的Gtk.Entry中觸發KeyPressEvent?

... 

    entry.KeyPressEvent += EntryKeyPressEvent; 

    ... 
} 

void EntryKeyPressEvent(object o, KeyPressEventArgs args) 
{ 
    Console.WriteLine("DEBUG: KeyValue: " + args.Event.KeyValue); 
    ... 
} 

EntryKeyPressEvent被調用,而不是返回鍵。爲什麼是這樣?

編輯:當大多數按鍵被按下時,它實際上不會被調用。有些人稱它爲(例如,上升,下降,逃跑),但大多數不會(例如,任何字母鍵,返回)。

僅供參考,我想端口PyGTK的代碼看起來像這樣:

... 

    entry.connect('key_press_event', self.entry_key_pressed) 

    ... 

def entry_key_pressed(self, widget, event): 
    ... 

回答

3

我能從this mailing list thread中弄明白。我所要做的就是適用於ConnectBefore屬性的處理方法:

[ConnectBefore] 
void EntryKeyPressEvent(object o, KeyPressEventArgs args) 
{ 
    Console.WriteLine("DEBUG: KeyValue: " + args.Event.KeyValue); 
    ... 
} 
+0

啊!所以Gtk.Entry正在吃那些按鍵事件!奇怪的是,它沒有在Python中這樣做。 – RAOF 2009-11-09 03:37:44

0

你們是不是要驗證輸入?焦點離開事件觸發焦點離開輸入框 - 就像用戶點擊Enter時一樣。

2

PyGTK FAQ:

鍵盤事件的處理方式不同。當你的窗口收到鍵盤事件時,它首先被髮送到頂層窗口,它將檢查它是否與任何鍵盤快捷鍵匹配。如果按鍵與快捷鍵不匹配,則將該事件分派給當前具有焦點的子小部件。

簡而言之:您的Gtk.Entry沒有看到按鍵事件信號,因爲頂級窗口正在做某事(即激活當前選定的窗口小部件)。

元回答:通常,搜索其他語言的GTK文檔是非常有用的。

+0

奇怪的是,我移植PyGTK的代碼,並在PyGTK的工作。我將編輯我的原始問題以包含工作的Python代碼。 – 2009-11-09 00:47:44

相關問題