wxPython Grid Control + клик - PullRequest
       29

wxPython Grid Control + клик

0 голосов
/ 01 декабря 2011

У меня есть класс сетки wxPython (wx.grid) со строками / столбцами и тому подобное.Я пытаюсь определить, когда пользователь выполняет «Control + Click» в определенной ячейке.Прямо сейчас у меня есть:

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"

Это прекрасно работает, когда просто нажимаешь на ячейку, но когда я выполняю Control + Click, это событие даже не срабатывает.

Как я могу связать это событие?

Ответы [ 2 ]

1 голос
/ 01 декабря 2011

Класс Grid уже обрабатывает события Ctrl-Click, чтобы реализовать добавление ячеек в коллекцию выделенных ячеек. Поскольку сетка уже использует это событие для этой цели, событие не распространяется и не преобразуется в события сетки (кроме событий выбора). Однако вы можете перехватить события мыши более низкого уровня, прежде чем сетка получит их, и выполнить там свои проверки. Попробуйте связать обработчики непосредственно с компонентом окна сетки в Grid, например:

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

Обязательно вызовите event.Skip () в вашем обработчике событий мыши, чтобы Grid все еще мог получать и обрабатывать событие.

Вам не нужно беспокоиться о перехвате ключевых событий для этого, потому что объект события, передаваемый обработчикам событий мыши, включает методы для получения состояния клавиш-модификаторов во время события мыши.

0 голосов
/ 01 декабря 2011

Я думаю, вам нужно привязать к EVT_KEY_DOWN и EVT_KEY_UP. В событии key down установите для некоторой переменной, например, self.ctrl, значение True. В событии up установите значение False. Вероятно, вам следует сначала установить его в False. Затем, когда он удерживается, он становится True и до тех пор, пока вы вызываете event.Skip (), ваше событие сетки должно срабатывать при нажатии. Что-то в этом духе должно сработать.

Это может помочь вам лучше понять ключевые события: http://www.blog.pythonlibrary.org/2009/08/29/wxpython-catching-key-and-char-events/

Не берите в голову этот ответ -> см. Робин Данна

...