0

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

代码:

    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()
4

1 回答 1

0

有几个问题。首先,您绑定了错误的事件。EVT_LIST_ITEM_SELECTED 用于 wx.ListCtrl。你想要 EV​​T_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/

于 2012-07-19T14:00:05.690 回答