Events 如何访问wx.EVT_列表框事件的特定参数?
我正在尝试设计一个GUI,其中一个组件是具有多重选择功能(style=wx.LB_multiple)的wx.ListBox。我还有另一个面板,我想在其中设置文本,以匹配ListBox上最后一个选定项的长描述 我知道我可以通过以下方式将ListBox绑定到函数:Events 如何访问wx.EVT_列表框事件的特定参数?,events,listbox,wxpython,multiple-select,Events,Listbox,Wxpython,Multiple Select,我正在尝试设计一个GUI,其中一个组件是具有多重选择功能(style=wx.LB_multiple)的wx.ListBox。我还有另一个面板,我想在其中设置文本,以匹配ListBox上最后一个选定项的长描述 我知道我可以通过以下方式将ListBox绑定到函数: listbox\u对象绑定(wx.EVT\u listbox,self.set\u说明) 但是,当我定义方法时 def set\u说明(自身、事件): …如何从事件参数推断列表框中的哪个项目是最后选择的,以及该项目是已选择还是取消选择?E
listbox\u对象绑定(wx.EVT\u listbox,self.set\u说明)
但是,当我定义方法时
def set\u说明(自身、事件):
…如何从事件参数推断列表框中的哪个项目是最后选择的,以及该项目是已选择还是取消选择?EVT_列表框生成wx.CommandEvent。(见附件)
对于列表框事件,有:IsSelection和GetSelection。我认为您必须自己跟踪数据。
例如:
import wx
class TestListBox(wx.Frame):
def __init__(self, *args, **kwds):
wx.Frame.__init__(self, *args, **kwds)
self.OldSelections= []
self.NewSelections = []
self.aList = ['zero', 'one', 'two', 'three', 'four', 'five',
'six', 'seven', 'eight', 'nine', 'ten', 'eleven',
'twelve', 'thirteen', 'fourteen']
self.lb = wx.ListBox(self, wx.NewId(), choices=self.aList, style=wx.LB_EXTENDED)
self.lb.Bind(wx.EVT_LISTBOX, self.EvtMultiListBox)
self.lb.SetSelection(0)
self.Show()
def EvtMultiListBox(self, event):
self.NewSelections = self.lb.GetSelections()
print('EvtMultiListBox: %s\n' % str(self.lb.GetSelections()))
for i in self.NewSelections:
if i not in self.OldSelections:
print (self.aList[i],"was added")
for i in self.OldSelections:
if i not in self.NewSelections:
print (self.aList[i],"was removed")
self.OldSelections = self.NewSelections
print("\n")
if __name__ == '__main__':
app = wx.App()
TestListBox(None)
app.MainLoop()
这些不会与
wx.LB_MULTIPLE
标志一起使用。虽然它们确实有效,但如果您进行多次选择(如Ctrl+a),则偶数只会收到一个选定的索引。奇怪的是……当我尝试将它们与wxPython 4一起使用时,我在Windows上遇到了错误。我正在访问事件对象though@MikeDriscollGetSelection返回列表框或选项选择事件的项目索引(对于取消选择无效)。
奇怪的是,使用Ctrl+Shift+Click(在Linux上)它对于使用event.GetSelection()的列表框
取消选择有效
我想你会发现wx.ListCtrl
或ObjectListView
更适合这种类型的东西。它们支持多选和自动取消选择。