슬라이더 위젯의 아무 곳이나 클릭하면 비디오가 해당 위치로 건너 뜁니다. 마우스 클릭 아래에서 슬라이더의 값을 가져오고 그 값을 어떻게 설정할 수 있습니까? 기본적으로 슬라이더를 클릭하면 한 번에 한 페이지 씩 스크롤되며 클릭 한 위치로 스크롤하지 않습니다.마우스 클릭시 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'을 따로 지정해야했다. –
적어도 마우스 클릭 위치를 얻을 수 있습니까? – jdi