如何确定在wxpython中选择了哪个列表框项目

时间:2012-07-19 00:29:01

标签: python wxpython

我正在制作音乐播放器。我有一个列表框,其中包含“歌曲”目录中的歌曲列表。如何确定选择哪首歌以及如何播放?

CODE:

    songlist = os.listdir('songs')
    self.myListBox = listbox = wx.ListBox(panel2, -1, (10,200), (140,200), songlist, wx.LB_SINGLE)

    self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.selLoadFile, listbox)

def selLoadFile(self, event):
    file_path = os.path.join(os.os.getcwd(), "songs", self.myListBox.getSelectedItem())
    self.doLoadFile(file_path)

   ########### I believe the problem is above ^ here. But I could be wrong. 

def Load(self, event):
    dlg = wx.FileDialog(self, "Choose a media file", "songs", "", "*.*", wx.OPEN)
    if dlg.ShowModal() == wx.ID_OK:
        path = dlg.GetPath()
        self.doLoadFile(path)
        dlg.Destroy() 

def doLoadFile(self, path):
    if not self.mc.Load(path):
        wx.MessageBox("Unable to load %s: Unsupported format?" % path, "ERROR", wx.ICON_ERROR | wx.OK)

    else:
        folder, filename = os.path.split(path)
        self.st_file.SetLabel('%s' % filename)
        self.mc.SetBestFittingSize()
        self.mc.Play()

1 个答案:

答案 0 :(得分:0)

有几个问题。首先,你有错误的事件限制。 EVT_LIST_ITEM_SELECTED用于wx.ListCtrl。你想要EVT_LISTBOX。接下来在你的处理程序中你有getSelectedItem,这不是一个真正的方法。 GetSelection返回所选项目的整数位置(从0开始),并且有GetStringSelection(),这可能就是你想要的。

您没有说出您正在播放的内容。你在使用wx.media.MediaCtrl吗?如果是这样,那么我写的关于播放MP3的教程可能会对你有帮助:http://www.blog.pythonlibrary.org/2010/04/20/wxpython-creating-a-simple-mp3-player/

我还玩过MplayerCtrl,它包装了Mplayer,看起来比MediaCtrl更强大,虽然设置起来有点复杂。如果您愿意,可以在此处阅读:http://www.blog.pythonlibrary.org/2010/07/24/wxpython-creating-a-simple-media-player/