回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个wxPython面板的下面的代码,我试图向用户显示所有的州,但我只希望他们能够选择(或检查)马萨诸塞州或纽约州。当用户在该状态上单击一次时,这会起作用已选择wx.EVT_LIST_ITEM_事件被调用,但如果您一直单击同一状态,则不会调用此事件。只有当用户单击不同的状态时才会再次调用它。我试过用wx.PyEvtHandler公司捕捉事件并找出当我单击一个项目时发生的事件,但是我唯一能看到的就是鼠标左键单击事件,它没有GetIndex属性。我是否错过了一个事件,该事件告诉我用户仍然在同一个列表项上,因此没有调用SELECTED或DESELECTED?非常感谢任何帮助。在</p>
<pre><code>import wx,wx.grid, ExampleImages #legend images
from ObjectListView import GroupListView, ColumnDefn, ObjectListView
class NEWLIST(wx.Panel):
"""Create a new information panel"""
def __init__(self, parent, INFOB):
wx.Panel.__init__(self, size=(-1, 460), parent=parent, id=wx.ID_ANY)
self.dataOlv = GroupListView(self, wx.ID_ANY, style=wx.LC_REPORT|wx.SUNKEN_BORDER)
self.dataOlv.useExpansionColumn = True
#----------------------------------------------------------------------
myimgsdict = {}
def myImageGetter(item):
k = item.code.capitalize()
myimgsdict[item.code] = self.dataOlv.AddImages(eval("ExampleImages.get%s16Bitmap()"%k))
if item in INFOB.list.dataOlv.GetCheckedObjects() and item.code in ('MA','NY'):
return myimgsdict[item.code]
#----------------------------------------------------------------------
self.statacolumn = ColumnDefn("Country", "left", 130, "state", useInitialLetterForGroupKey=True,isSpaceFilling=True)
self.legendcolumn = ColumnDefn("" , "left", 16, "legend" , imageGetter=myImageGetter)
self.totalcolumn = ColumnDefn("Total" , "right", 70, "total")
self.inviscolumn = ColumnDefn("" , "right", 0, "region")
self.dataOlv.SetColumns([self.statecolumn, self.legendcolumn, self.totalcolumn, self.inviscolumn])
self.dataOlv.InstallCheckStateColumn(self.statecolumn)
self.dataOlv.SetSortColumn(self.dataOlv.columns[2])
#----------------------------------------------------------------------
# Create some sizers
mainSizer = wx.BoxSizer(wx.VERTICAL)
mainSizer.Add(self.dataOlv, 1, wx.ALL|wx.EXPAND, 5)
self.SetSizer(mainSizer)
#----------------------------------------------------------------------
def OnItemSelected(event):
"""Action for when item is seleted by the user"""
realIndex = INFOB.list.dataOlv[event.GetIndex()]
if realIndex.code not in ('MA','NY'):
self.dataOlv.Uncheck(realIndex)
#----------------------------------------------------------------------
self.dataOlv.Bind(wx.EVT_LIST_ITEM_SELECTED, OnItemSelected)
self.dataOlv.Bind(wx.EVT_LIST_ITEM_ACTIVATED, OnItemSelected)
#self.dataOlv.Bind(wx.EVT_COMMAND_LEFT_CLICK, OnItemSelected)
self.dataOlv.Bind(wx.EVT_LIST_ITEM_DESELECTED, OnItemSelected)
self.dataOlv.Bind(wx.EVT_LIST_CACHE_HINT, OnItemSelected)
</code></pre>
<p>谢谢!在</p>