Python 如何从wxpyton gui单击事件中获取列表数据?

Python 如何从wxpyton gui单击事件中获取列表数据?,python,wxpython,Python,Wxpython,我有一个列表ctrl框,我用数据填充它 self.listView1.Append([sFilename,sTitle,sArtist,sAlbum,sDestDir]) 我创建了一个事件,当用户单击列表中的特定项时触发该事件 def OnListView1ListItemSelected(self, event): print "onListViewSelect" 这是可行的,但我一直关注的是如何从用户单击的列表中捕获单行数据?使用wxPython 2.8.10,这是将所选行中所有

我有一个列表ctrl框,我用数据填充它

self.listView1.Append([sFilename,sTitle,sArtist,sAlbum,sDestDir])
我创建了一个事件,当用户单击列表中的特定项时触发该事件

def OnListView1ListItemSelected(self, event):
    print "onListViewSelect"

这是可行的,但我一直关注的是如何从用户单击的列表中捕获单行数据?

使用wxPython 2.8.10,这是将所选行中所有列的文本放入列表的一种方法。获取对象、选定索引、列数,然后从每列中获取文本:

def onListView1ListItemSelected(self, event):
    obj     = event.GetEventObject()
    index   = event.GetIndex()
    columns = obj.GetColumnCount()
    data    = []

    for i in range(columns):
        item = obj.GetItem(index, i)
        data.append(item.GetText())

    print(data)

我提到这个版本是因为我认为最新的wxPython版本允许您在wx.ListCtrl.GetItemText中指定一列,这可以简化一些事情。不过我还没有试过。

我认为最简单的方法就是将数据与行关联起来。你可以在这里阅读我的方法:


就我个人而言,我最喜欢ObjectListView:

另一个答案是我一直在寻找的——不过我喜欢你的博客文章,我想我会用它来推动我朝着几个不同的方向前进。谢谢。这是我一直在寻找的答案,我将在短期内使用它。但我认为我更喜欢@Mike Driscoll提供的答案,以便更长期更好地实施。我同意Mike的观点。如果您只需填写一次列表,然后检索项目,这并不重要,但如果您想以任何方式操作数据,ListCtrl本身将是一种非常笨拙的存储方式。@robots.jpg-您的答案最初是有效的,但是当我尝试将sinble值提取为字符串时,它读取到它实际上为该字符串指定了一个文本引用。我尝试了sTitle=obj.GetItem(索引,2),因为我知道第二个列是这首歌的标题。但是当我尝试“打印sTitle”时,我得到:(wx._controls.ListItem;代理您尝试打印一个ListItem。请尝试sTitle.GetText()的结果。@robots.jpg您能帮我一点忙吗?我对此非常陌生,我做这是一个自学练习。我厌倦了sTitle=obj.GetText(index,2)然后我尝试了一个sTitle.gettext(obj.GetItem(index,2))在本例中失败了,因为sTitle没有被定义为任何类型的对象,所以它无法理解。我想读取第二列的值,并将其放入一个简单的变量中。Tks再次提供帮助