Events 如何访问wx.EVT_列表框事件的特定参数?

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

我正在尝试设计一个GUI,其中一个组件是具有多重选择功能(style=wx.LB_multiple)的wx.ListBox。我还有另一个面板,我想在其中设置文本,以匹配ListBox上最后一个选定项的长描述

我知道我可以通过以下方式将ListBox绑定到函数:
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@MikeDriscoll
GetSelection返回列表框或选项选择事件的项目索引(对于取消选择无效)。
奇怪的是,使用Ctrl+Shift+Click(在Linux上)它
对于使用
event.GetSelection()的
列表框
取消选择有效
我想你会发现
wx.ListCtrl
ObjectListView
更适合这种类型的东西。它们支持多选和自动取消选择。