2015-01-16 52 views
1

我正在使用Python 2.7和wxPython 3.0 msw(經典)。這是我的代碼:獲取滑動條以響應點擊任何沿着酒吧

class MusicPlayer(wx.Panel): 
    def __init__(self, *args, **kwargs): 
     super(MusicPlayer, self).__init__(*args, **kwargs) 

     # it remains to be seen if my new design choices 
     # have any negative effect on the application 
     # in the end. 
     self.setupTimer() 
     self.media_ctrl = self.setupMediaPlayer() 
     self.media_ctrl.Hide() 

     self.master_sizer = wx.BoxSizer(wx.VERTICAL) 
     self.slider_sizer = self.setupSlider() #this should return a sizer. 
     self.button_sizer = self.setupButtons() 
     self.music_info_sizer = self.setupMusicDataView() 

     self.master_sizer.Add(self.music_info_sizer, 0, wx.EXPAND | wx.ALL, border=7) 
     self.master_sizer.Add(self.slider_sizer, 0, wx.EXPAND) 
     self.master_sizer.Add(self.button_sizer, 0, wx.EXPAND) 

     self.SetSizer(self.master_sizer) 

     self.Bind(wx.media.EVT_MEDIA_LOADED, self.OnPlay) 
     pub.subscribe(self.OnLoad, 'files_loaded_topic') 

    def setupSlider(self): 
     # I wonder if I need to add self to this... 
     self.seek_slider = wx.Slider(self, -1, 0, 1, 2) 
     self.seek_slider.Bind(wx.EVT_SLIDER, self.OnSeek) 

     sliderSizer = wx.BoxSizer(wx.HORIZONTAL) 
     sliderSizer.Add(self.seek_slider, 1, wx.EXPAND | wx.ALL, border=2) 
     return sliderSizer 

    def OnSeek(self, event): 
     offset = self.seek_slider.GetValue() 
     self.media_ctrl.Seek(offset) 

這基本上是這個媒體播放器的內臟,我搞亂了。這裏的問題與我得到的滑塊(我已經省略了大部分其他代碼以便於閱讀)。我可以點擊拇指並在條上拖動它以按預期方式在歌曲中跳轉位置,但每當我嘗試通過直接單擊欄來更改滑塊位置時,什麼都不會發生。

我試過使用不同的事件,wx.EVT_SCROLL和wx.EVT_COMMAND_SCROLL,但似乎沒有工作。

這對演示應用程序有一個超級簡單的Slider示例沒有幫助,它似乎具有即用即用的功能,無需進行任何更改。

有沒有什麼辦法讓這個功能起作用?

回答

0

試着把event.Skip()作爲您的最後一行OnSeek。否則,您會捕獲EVT_SLIDER,並且不要讓它沿着鏈條前進,因此wx將無法​​響應。例如,請參閱this

+0

不,沒有工作。 – cornjuliox

+0

如果刪除'self.seek_slider.Bind(wx.EVT_SLIDER,self.OnSeek)'這一行,問題是否仍然存在? – tom10