【发布时间】:2011-07-12 15:36:01
【问题描述】:
我有一个 wx.ListBox,我希望用户从中进行选择,就像他们按住 CTRL 键一样。所以 - 如果您单击一个未选中的项目,它将被选中(不修改其他选择),如果您单击一个选定的项目,它将被取消选择(再次不修改其他选择)。
创建列表框的代码是:
self.myListBox = wx.ListBox(self,
-1,
choices=self.keys,
style = wx.LB_HSCROLL
| wx.LB_MULTIPLE
| wx.LB_NEEDED_SB
| wx.LB_SORT)
self.Bind(wx.EVT_LISTBOX, self.OnSelection, self.myListBox)
问题/疑问:
是否已经有一种简单的方法可以做到这一点?
wx.LB_MULTIPLE或wx.LB_EXTENDED看起来可能是我想要的,但我都尝试过,但似乎并没有改变任何东西。文档中的描述也有点模糊 - 两者之间究竟有什么区别?-
我知道
event.GetSelection()可以得到选中项的id,但是如果我尝试实现上述逻辑,即:if self.myListBox.IsSelected(idx): self.myListBox.Deselect(idx) else: self.myListBox.Select(idx)事件已经触发,所以它只是取消选择刚刚选择的任何内容。在那之前也试过打电话给
event.Skip(),但也没有运气。有没有办法阻止它这样做? 我注意到,当拖动鼠标进行多项选择时,
event.GetSelection()会得到正确的 id 向上 - 即3, 2, 1, 0- 但向下它只会显示第一个 -0, 0, 0, 0。我猜它只是打印出选择列表中的第一项——有没有办法从事件对象中获取列表(而不是调用self.myListBox.GetSelections())?
我正在运行 Linux 和 wxPython 版本 2.6.4.0。
【问题讨论】: