[출처 : http://withrobot.tistory.com/137]
슬라이더를 움직여 값을 설정하면 어떤 동작을 취하고 싶을 때가 있다. 이 때는 EVT_SCROLL_CHANGED 이벤트를 사용하면 된다.
아래 예제는 슬라이더 옆에 StaticText()를 이용해 숫자를 출력하고, 슬라이더를 움직여 설정했을 때 OnDisplayValue() 함수를 실행시켜 설정된 값으로 출력값을 갱신하도록 만들었다. 이 구조를 이용하면 슬라이더를 이용하여 특정 값을 설정했을 때 필요한 작업을 수행할 수 있도록 프로그램을 작성할 수 있을 것이다.
#!/usr/bin/env python
"""10-3. Slider, EVT_SCROLL_CHANGED 이벤트 사용 """
# http://withrobot.tistory.com
# 2007.11.26
import wx
class Frame(wx.Frame):
def __init__(self, parent=None, id=-1, title='Slider'):
wx.Frame.__init__(self, parent, id, title, size=(300,300), pos=(100,100) )
panel = wx.Panel(self)
self.mySlider = wx.Slider(panel,100,25,1,100,pos=(20,10),size=(250,-1),style=wx.SL_HORIZONTAL|wx.SL_AUTOTICKS |wx.SL_LABELS)
self.mySlider.SetTickFreq(10,1)
self.myValue = wx.StaticText(panel, -1, str(self.mySlider.GetValue()),pos=(0,30))
self.Bind(wx.EVT_SCROLL_CHANGED, self.OnDisplayValue)
def OnDisplayValue(self, event):
self.myValue.SetLabel(str(self.mySlider.GetValue()))
class App(wx.App):
def OnInit(self):
self.frame = Frame()
self.frame.Show()
return True
def main():
app = App()
app.MainLoop()
if __name__ == '__main__':
main()
위 예제에서 비슷한 이벤트 메시지로 EVT_SCROLL_THUMBRELEASE가 있다. 이는 슬라이더의 조정 버튼(thumb)에서 마우스 버튼을 뗄 때 발생하는 이벤트로 기능적으로는 EVT_SCROLL_CHANGED와 같다. 하지만 슬라이더를 마우스가 아니라 키보드로도 조절할 수 있는데, EVT_SCROLL_THUMBRELEASE 를 사용하면 슬라이더 설정값은 바뀌어도 이벤트는 발생하지 않게 된다. 필요에 따라 이 두 이벤트를 적절히 선택하여 사용한다.
아래 예제는 슬라이더 옆에 StaticText()를 이용해 숫자를 출력하고, 슬라이더를 움직여 설정했을 때 OnDisplayValue() 함수를 실행시켜 설정된 값으로 출력값을 갱신하도록 만들었다. 이 구조를 이용하면 슬라이더를 이용하여 특정 값을 설정했을 때 필요한 작업을 수행할 수 있도록 프로그램을 작성할 수 있을 것이다.
EVT_SCROLL_CHANGED 설정
#!/usr/bin/env python
"""10-3. Slider, EVT_SCROLL_CHANGED 이벤트 사용 """
# http://withrobot.tistory.com
# 2007.11.26
import wx
class Frame(wx.Frame):
def __init__(self, parent=None, id=-1, title='Slider'):
wx.Frame.__init__(self, parent, id, title, size=(300,300), pos=(100,100) )
panel = wx.Panel(self)
self.mySlider = wx.Slider(panel,100,25,1,100,pos=(20,10),size=(250,-1),style=wx.SL_HORIZONTAL|wx.SL_AUTOTICKS |wx.SL_LABELS)
self.mySlider.SetTickFreq(10,1)
self.myValue = wx.StaticText(panel, -1, str(self.mySlider.GetValue()),pos=(0,30))
self.Bind(wx.EVT_SCROLL_CHANGED, self.OnDisplayValue)
def OnDisplayValue(self, event):
self.myValue.SetLabel(str(self.mySlider.GetValue()))
class App(wx.App):
def OnInit(self):
self.frame = Frame()
self.frame.Show()
return True
def main():
app = App()
app.MainLoop()
if __name__ == '__main__':
main()
위 예제에서 비슷한 이벤트 메시지로 EVT_SCROLL_THUMBRELEASE가 있다. 이는 슬라이더의 조정 버튼(thumb)에서 마우스 버튼을 뗄 때 발생하는 이벤트로 기능적으로는 EVT_SCROLL_CHANGED와 같다. 하지만 슬라이더를 마우스가 아니라 키보드로도 조절할 수 있는데, EVT_SCROLL_THUMBRELEASE 를 사용하면 슬라이더 설정값은 바뀌어도 이벤트는 발생하지 않게 된다. 필요에 따라 이 두 이벤트를 적절히 선택하여 사용한다.