【问题标题】:Get wxpython slider's value under mouse click在鼠标单击下获取 wxpython 滑块的值
【发布时间】:2012-04-01 02:30:21
【问题描述】:

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

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

【问题讨论】:

  • 你至少能得到鼠标点击的位置吗?

标签: python wxpython wxwidgets


【解决方案1】:

以下代码在 Windows XP 中有效,但是我不知道如何通过实验以外的其他方式获得 GAP 常量。 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()

【讨论】:

  • 谢谢,我使用了这段代码并且它工作了(Windows 7),但经过修改 - 左右的间隙不相同,所以我必须分别指定 LEFT_GAPRIGHT_GAP
【解决方案2】:

通过从滑块继承来创建一个新控件。与基本滑块控件的唯一变化是您覆盖了处理鼠标单击事件的方法,您的方法需要做两件事:调用用于“跳过视频到鼠标单击”的例程并调用基本滑块控件鼠标单击处理程序,以便它可以查看视觉反馈详细信息。

【讨论】:

    猜你喜欢
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    相关资源
    最近更新 更多