2011-12-01 15 views
0

我有一個wxPython的網格(wx.grid)類具有行/列並且這樣。我試圖檢測用戶何時在特定單元格上執行「Control + Click」。現在,我有:wxPython的網格控制+點擊

def __init__(self, parent, size): 
    grd.Grid.__init__(self, parent, -1, size=size) 
    self.control_button_pressed = False 

    self.Bind(grd.EVT_GRID_CELL_LEFT_CLICK, self._OnSelectedCell) 
    self.Bind(wx.EVT_KEY_DOWN, self._OnKeyPress) 
    self.Bind(wx.EVT_KEY_UP, self._OnKeyUp) 

def _OnKeyPress(self, event): 
    self.control_button_pressed = True 
    event.Skip() 

def _OnKeyLift(self, event): 
    self.control_button_pressed = False 

def _OnSelectedCell(self, event): 
    print "Cell Selected" 

能正常工作時,只需點擊該單元格,但是當我執行控制+點擊,該事件不會做甚至引起火災。

我怎麼能結合這個活動?

回答

0

我認爲你需要綁定到EVT_KEY_DOWN和EVT_KEY_UP。在關鍵事件中,將一些變量(如「self.ctrl」)設置爲True。在up事件中,將其設置爲False。您應該最初也可以將它設置爲False。然後當它被按下時,它變成True,只要你調用event.Skip(),你的網格事件就會在你點擊時觸發。無論如何,沿着這些線應該工作。

這可以幫助你瞭解關鍵事件更好:http://www.blog.pythonlibrary.org/2009/08/29/wxpython-catching-key-and-char-events/

沒關係這個答案 - >見羅賓鄧恩的

+0

我已經更新上面的代碼按你說的,它仍然不會捕獲當我按住Ctrl鍵單擊單元格。 – lightningmanic

1

網格類已處理按住Ctrl單擊事件來實現增加細胞的集合選定的細胞。由於網格已經爲此目的消耗該事件,因此事件不會傳播或轉換爲網格事件(除選擇事件外)。但是,您可以在網格獲取它們之前攔截較低級別的鼠標事件,並在那裏執行檢查。直接嘗試綁定處理程序到網格的網格窗口組件,如下所示:

self.GetGridWindow().Bind(wx.EVT_LEFT_UP, self.onLeftUp) 

一定要調用event.Skip()在你的鼠標事件處理程序,以便網格仍然可以獲取和處理事件。

您不必擔心醒目的關鍵事件是因爲傳遞給鼠標事件處理事件對象包括在鼠標事件發生的時間去修改鍵的狀態的方法。

+0

我設置你上面有確切的代碼,並且定義'onLeftUp(個體經營,事件):'與打印和'event.Skip()' - 但我仍然在運行到同樣的問題。當我按住Control鍵時,它從不記錄點擊(沒有發生)。不過,我認爲這是正確的軌道,因爲Shift鍵確實有效 - Grid類必須在其他地方處理Ctrl + Click,我只是想重寫它。 – lightningmanic