I have simple player with wx.ListCtrl as playlist. I first Load List through open file dialog. I populate a dictionary with filenames (populated in Playlist) as keys with their path as values. When I press play, the onPlay method calls onSetPath method which looks up for selected file from list and Loads it path to wx.media.MediaCtrl and then it plays file.

The List Loads fine and onSetPath Loads the path but cannot play the file. Any correction on where I mess up?? Below is the code for mentioned method (Full code is little huge)

#Load File paths
    def onLoad(self, evt):
        dlg = wx.FileDialog(self, message = "Choose Media File to Open", defaultDir = os.getcwd(), defaultFile = "", wildcard = "Media Files|*.mp3;*.wma; *.avi; *.au;*.mpg", style = wx.FD_OPEN| wx.CHANGE_DIR |wx.FD_MULTIPLE)
        ret = dlg.ShowModal()
        if ret == wx.ID_OK:
            self.paths = dlg.GetPaths()
            self.onLoadPlaylist(self.paths)
            dlg.Destroy()
#Loads playList to the List box with name, Format, directory
    def onLoadPlaylist(self, paths):
        #get list of directories with file names eg c:\steve.mp3
        file_list_paths = paths 
        file_list = []
        file_path = dict() #hold filename_ext as keyword and path as value and can be compared to selected file in playlist and get its path as value
        for path in file_list_paths : 
            path.strip()
            directory, filename_and_ext = os.path.split(path)            
            full_tuple = (filename_and_ext, directory, "" )
            file_list.append(full_tuple)
            file_path[filename_and_ext] = path
            
        #Insert values in Col and Rows
        for i in file_list:
            index = self.playlist.InsertStringItem(sys.maxint, i[0])
            self.playlist.SetStringItem(index, 1, i[1])
            self.playlist.SetStringItem(index, 2, i[2])
        # Make dictionary the attribute of the class
        self.file_path = file_path
# Get selected from list and set it 
    def onSetPath(self):
        index1 = self.playlist.GetFirstSelected() 
        filename = self.playlist.GetItemText(index1)     
        path = self.file_path[filename]
        self.path = path
        return self.player.Load(self.path)
#play it
    def onPlay(self, evt):
        wx.CallAfter(self.onSetPath())
        self.player.Play()
        self.slider.SetRange(0, self.player.Length())
        self.player.SetVolume(0.404459081855)
        volume = str(self.player.GetVolume())
        self.label.SetLabel("Vol: %s" %(volume,))

I already solved parent problem, and this automatically solved

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.