wxPython dataviewcustomrenderer 左键单击事件不会触发
wxPython dataviewcustomrenderer Left click event won't fire
我有一个 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
但是如何让左键单击事件真正触发?我曾尝试在 init 函数中使用 self.Bind,但这给了我一个错误,即 'DataViewButtonRenderer' 对象没有属性 'Bind',又名 DataViewCustomRenderer 没有绑定方法。如何绑定活动?
渲染器只负责渲染,即绘制单元格内容。要更改它,您有两种可能性:要么使单元格可激活,然后您可以对 wxEVT_DATAVIEW_ITEM_ACTIVATED
事件做出反应,这些事件通过双击单元格或从键盘生成;或使其可编辑,然后您可以通过覆盖渲染器中的 CreateEditorCtrl()
方法来使用自定义编辑器。
我有一个 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
但是如何让左键单击事件真正触发?我曾尝试在 init 函数中使用 self.Bind,但这给了我一个错误,即 'DataViewButtonRenderer' 对象没有属性 'Bind',又名 DataViewCustomRenderer 没有绑定方法。如何绑定活动?
渲染器只负责渲染,即绘制单元格内容。要更改它,您有两种可能性:要么使单元格可激活,然后您可以对 wxEVT_DATAVIEW_ITEM_ACTIVATED
事件做出反应,这些事件通过双击单元格或从键盘生成;或使其可编辑,然后您可以通过覆盖渲染器中的 CreateEditorCtrl()
方法来使用自定义编辑器。