获取滑块以响应条形图上的任何位置的点击

时间:2015-01-16 10:42:58

标签: python wxpython

我使用的是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示例,它似乎具有开箱即用的功能,无需进行任何更改,这无济于事。

有没有办法让这项功能正常运作?

1 个答案:

答案 0 :(得分:0)

尝试将event.Skip()作为OnSeek的最后一行。否则你会抓住EVT_SLIDER并且不要让它向上推进,因此wx无法响应它。例如,请参阅this