2012-11-19 86 views
0

我見過很多關於此主題的信息,但沒有完全解答這個問題。我有最相反的問題。當按鈕有焦點時,我想阻止Enter按鈕點擊一個按鈕。要做到這一點,我不希望簡單地禁用按鈕接受按下Enter按鈕,而是我想有條件地按回撥方法按下Enter按鈕。現在,我已綁定了以下事件的所有部件在我的Python程序:當按下回車鍵,我抽到的回調在我的回調方法wxPython輸入按鈕事件

parent.Bind(wx.EVT_CHAR, self.CharInputCallback) 

的EVT_CHAR事件實際上是拋出。我的問題是,儘管有意不跳過事件(將事件轉發),但按鈕的虛擬點擊按鈕的功能仍然通過。既然發生了這種情況,而且我確定我的回調方法並未將事件轉發給我(我已經通過捕獲字符到文本框來測試這一點),我懷疑輸入按鈕會拋出一個我沒有捕獲的附加事件。然而

parent.Bind(wx.EVT_TEXT_ENTER, self.CharInputCallback) 
parent.Bind(wx.EVT_KEY_UP, self.CharInputCallback) 
parent.Bind(wx.EVT_KEY_DOWN, self.CharInputCallback) 

當我按下回車,在焦點的按鈕依然點擊:我試着結合並捕獲更多的下列事件,防止「虛擬點」,從進入按鈕。總而言之,當我按下回車按鈕時是否會出現附加事件?如果是這樣,哪個事件特別是「虛擬點擊」按鈕?我發現的大多數論壇都討論瞭如何識別何時按下輸入按鈕,但是我想識別它並在按鈕處於焦點時禁用它的默認操作。

回答

0

我嘗試將所有這些事件綁定到不同的處理程序,我也綁定EVT_BUTTON。 EVT_BUTTON看起來總是在鍵和事件發生之前觸發。如果你不想讓你的按鈕被點擊,那麼你可能不得不禁用它,使用不同的小部件(可能是其中一個通用按鈕)或創建自己的按鈕。我也會在wxPython郵件列表上詢問他們是否有任何建議。

在我知道的wxPython中排序事件的唯一方法是使用wx.CallAfter或wx.CallLater。我不確定你在這種情況下如何使用它。

+0

我發現按鍵事件是導致按鈕點擊的事件。或者最終導致按鈕點擊。通過捕獲並不跳過鍵盤事件,我可以防止按鈕進入焦點。有趣的是,我在綁定我之前提到的所有事件時遇到了一些問題。目前我正在捕獲EVT_CHAR和KEY_UP事件。這似乎有伎倆。 – user1777820

+0

呵呵。奇。我沒有注意到Windows 7上的行爲。無論如何,我很高興你明白了。 –

0

導致點擊按鈕的事件是關鍵事件。我的回調代碼被搞砸了。捕獲按鍵事件並不跳過它可以防止輸入按鈕單擊焦點按鈕。反正在Windows 7上。