获取wxpython滑块';鼠标单击下的s值

获取wxpython滑块';鼠标单击下的s值,python,wxpython,wxwidgets,Python,Wxpython,Wxwidgets,我希望模拟或大多数媒体播放器的滑块-点击滑块部件上的任意位置将视频跳过到该位置。如何在鼠标单击下获取滑块的值并将其设置为该值 默认情况下,单击滑块时,它一次仅滚动一个页面大小,而不会滚动到用户单击的位置。通过继承滑块创建新控件。基本滑块控件的唯一更改是重写处理鼠标单击事件的方法,您的方法需要做两件事:调用用于“将视频跳过鼠标单击”的例程,并调用基本滑块控制鼠标单击处理程序,以便它可以查看视觉反馈详细信息。以下代码在Windows XP中工作:,然而,除了通过实验,我不知道如何用另一种方法获得间隙

我希望模拟或大多数媒体播放器的滑块-点击滑块部件上的任意位置将视频跳过到该位置。如何在鼠标单击下获取滑块的值并将其设置为该值


默认情况下,单击滑块时,它一次仅滚动一个页面大小,而不会滚动到用户单击的位置。

通过继承滑块创建新控件。基本滑块控件的唯一更改是重写处理鼠标单击事件的方法,您的方法需要做两件事:调用用于“将视频跳过鼠标单击”的例程,并调用基本滑块控制鼠标单击处理程序,以便它可以查看视觉反馈详细信息。

以下代码在Windows XP中工作:,然而,除了通过实验,我不知道如何用另一种方法获得
间隙
常数。
GAP
值指示小部件边缘和绘制滑块实际开始之间的空白空间

import wx

GAP = 12

class VideoSlider(wx.Slider):
    def __init__(self, gap, *args, **kwargs):
        wx.Slider.__init__(self, *args, **kwargs)
        self.gap = gap
        self.Bind(wx.EVT_LEFT_DOWN, self.OnClick)

    def linapp(self, x1, x2, y1, y2, x):
        return (float(x - x1) / (x2 - x1)) * (y2 - y1) + y1

    def OnClick(self, e):
        click_min = self.gap
        click_max = self.GetSize()[0] - self.gap
        click_position = e.GetX()
        result_min = self.GetMin()
        result_max = self.GetMax()
        if click_position > click_min and click_position < click_max:
            result = self.linapp(click_min, click_max, 
                                 result_min, result_max, 
                                 click_position)
        elif click_position <= click_min:
            result = result_min
        else:
            result = result_max
        self.SetValue(result)
        e.Skip()

class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.panel = wx.Panel(self)
        self.slider = VideoSlider(parent=self.panel, size=(300, -1), gap=GAP)
        self.slider.Bind(wx.EVT_SLIDER, self.OnSlider)

        self.sizer = wx.BoxSizer()
        self.sizer.Add(self.slider)

        self.panel.SetSizerAndFit(self.sizer)  
        self.Show()     

    def OnSlider(self, e):
        print(self.slider.GetValue())    

app = wx.App(False)
win = MainWindow(None)
app.MainLoop()
导入wx
差距=12
类视频滑块(wx.Slider):
定义初始值(self、gap、*args、**kwargs):
wx.Slider.\uuuuu init\uuuuuu(self,*args,**kwargs)
self.gap=gap
self.Bind(wx.EVT\u左下,self.OnClick)
def linapp(自身、x1、x2、y1、y2、x):
返回(浮动(x-x1)/(x2-x1))*(y2-y1)+y1
def OnClick(自我,e):
单击_min=self.gap
单击_max=self.GetSize()[0]-self.gap
单击_position=e.GetX()
结果_min=self.GetMin()
结果\u max=self.GetMax()
如果单击位置>单击最小值,然后单击位置<单击最大值:
结果=self.linapp(单击最小值,单击最大值,
结果最小值,结果最大值,
单击(U位置)

elif click_position您是否至少能够获得鼠标单击位置?谢谢,我使用了此代码,并且它在Windows 7中运行,经过修改-左右间距不相同,因此我必须分别指定
左间距
右间距