我希望模擬或大多數媒體播放器的滑塊 - 點擊滑塊小部件上的任意位置可將視頻跳到該位置。如何在鼠標點擊下獲得滑塊的值並將其設置爲該值? 默認情況下,當單擊滑塊時,它一次只滾動頁面大小,而不滾動到用戶單擊的位置。在鼠標點擊下獲取wxpython滑塊的值
謝謝!
我希望模擬或大多數媒體播放器的滑塊 - 點擊滑塊小部件上的任意位置可將視頻跳到該位置。如何在鼠標點擊下獲得滑塊的值並將其設置爲該值? 默認情況下,當單擊滑塊時,它一次只滾動頁面大小,而不滾動到用戶單擊的位置。在鼠標點擊下獲取wxpython滑塊的值
謝謝!
通過從滑塊繼承來創建新控件。從基本滑塊控件的唯一更改是您重寫處理鼠標單擊事件的方法,您的方法需要做兩件事:調用您用來「跳過視頻以單擊鼠標」的例程並調用基本滑塊控件鼠標點擊處理程序,以便可以查看視覺反饋細節。
以下代碼適用於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_GAP'和'RIGHT_GAP'。 – 2016-02-02 15:16:50
您是否至少能夠獲得鼠標點擊位置? – jdi 2012-04-01 03:13:33