[출처 : http://withrobot.tistory.com/137]


슬라이더를 움직여 값을 설정하면 어떤 동작을 취하고 싶을 때가 있다. 이 때는 EVT_SCROLL_CHANGED 이벤트를 사용하면 된다.

아래 예제는 슬라이더 옆에 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 를 사용하면 슬라이더 설정값은 바뀌어도 이벤트는 발생하지 않게 된다. 필요에 따라 이 두 이벤트를 적절히 선택하여 사용한다.

+ Recent posts