【问题标题】:How to determine what item of listbox is selected in wxpython如何确定在wxpython中选择了列表框的哪个项目
【发布时间】:2012-07-19 22:00:05
【问题描述】:

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

代码:

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

【问题讨论】:

    标签: python wxpython


    【解决方案1】:

    有几个问题。首先,您绑定了错误的事件。 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/

    【讨论】:

    • 感谢您的信息!这是一个很棒的教程和示例,这是我最初用来帮助构建我的音乐播放器的。哦,我正在使用 wx.media.MediaCtrl
    猜你喜欢
    • 2011-06-17
    • 2012-10-29
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    相关资源
    最近更新 更多