wxPython dataviewcustomrenderer Событие левого щелчка не сработает - PullRequest
0 голосов
/ 07 июня 2018

У меня есть DataViewListCtrl, где я хотел бы иметь столбец кнопок.Чтобы добиться этого, я использую следующий пользовательский рендер:

class DataViewButtonRenderer( dv.DataViewCustomRenderer ):

def __init__(self, log, *args, **kw):
    dv.DataViewCustomRenderer.__init__(self, *args, **kw)
    self.log = log
    self.down = False
    self.value = None

def SetValue(self, value):
    self.value = value
    return True

def GetValue(self):
    return self.value

def GetSize(self):
    value = self.value if self.value else ""
    size = self.GetTextExtent(value * 2)
    return size

def Render(self, rect, dc, state):
    dc.SetBrush( wx.LIGHT_GREY_BRUSH )
    dc.SetPen( wx.TRANSPARENT_PEN )

    rect.Deflate(2)

    dc.DrawRoundedRectangle( rect, 4 )
    value = self.value if self.value else ""
    self.RenderText(value, 15, rect, dc, state)

    if self.down and not self.click_handled:
        self.click_handled = True
        self.ActivateCell()

    return True

def GetValueFromEditorCtrl(self, editor):
    self.log.write('GetValueFromEditorCtrl: %s' % editor)
    value = editor.GetValue()
    return True, value

def LeftClick(self, pos, cellRect, model, item, col):
    self.log.write('LeftClick')
    print "Left Click"
    return False

def ActivateCell(self, cell, model, item, col, event=wx.MouseEvent):
    self.log.write('ActivateCell')
    print "Button clicked"
    return False

Но как мне получить событие левого клика, чтобы оно действительно сработало?Я попытался использовать self.Bind в функции init , но это дает мне ошибку, что у объекта DataViewButtonRenderer нет атрибута «Bind», а у DataViewCustomRenderer нет метода Bind.Как я могу связать событие?

1 Ответ

0 голосов
/ 08 июня 2018

Рендереры отвечают только за рендеринг, т.е. рисование содержимого ячейки.Для его изменения у вас есть 2 возможности: либо активировать ячейку, и затем вы можете реагировать на wxEVT_DATAVIEW_ITEM_ACTIVATED события, генерируемые двойным щелчком по ячейке или с клавиатуры;или сделайте его редактируемым, а затем вы можете использовать для него собственный редактор, переопределив метод CreateEditorCtrl() в вашем рендерере.

...