我有一个具有单选模式的虚拟ListCtrl。现在我想在listitems上自定义点击次数,班次点击次数和控制点击次数。为此,我需要在wx.EVT_LIST_ITEM_SELECTED的事件处理程序期间使用GetModifiers()。我该怎么做?
我尝试了以下内容:
1)在我的自定义ListCtrl的 init ()期间实例化self.keyboard = wx.KeyboardState()。然后在事件处理期间调用self.keyboard.GetModifiers()。
2)在事件处理期间实例化KeyboardState-class。
要测试它是否有效我只打印所有捕获的修饰符。但它始终为0(即MOD_NONE)。
我还尝试使用wx.EVT_LEFT_DOWN和wx.EVT_LEFT_UP而不是wx.EVT_LIST_ITEM_SELECTED。当我点击列表项目时,前者有同样的问题,后者甚至没有被解雇。
答案 0 :(得分:0)
这会将鼠标和项目选定事件分配给同一个事件,然后使用event.Skip()
确保我们同时看到这两个事件。
也许这可能会让你知道如何进步
使用Shift,Ctrl等组合,mods
将根据所按的内容为您提供不同的数字。
import wx
class Myframe(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None)
pan = wx.Panel(self)
self.listC = wx.ListCtrl(pan, style=wx.LC_REPORT)
self.listC.InsertColumn(0, 'Column1', width=50)
self.listC.InsertColumn(1, 'Column2', width=50)
self.listC.InsertColumn(2, 'Column3', width=50)
self.listC.Bind(wx.EVT_LEFT_DOWN, self.ListClick)
self.listC.Bind(wx.EVT_LIST_ITEM_SELECTED, self.ListSelected)
self.listC.InsertStringItem(0,"Item1")
self.listC.SetStringItem(0, 1,"Col 1 Item")
self.listC.SetStringItem(0, 2,"Col 2 Item")
self.listC.InsertStringItem(1,"Item2")
self.listC.SetStringItem(1, 1,"Col 1 Item")
self.listC.SetStringItem(1, 2,"Col 2 Item")
def ListClick(self, event):
mods = event.GetModifiers()
print mods
event.Skip()
def ListSelected(self, event):
print "selected"
if __name__ == "__main__":
App = wx.App()
Myframe().Show()
App.MainLoop()