티스토리 뷰

self.canvas.bind("<MouseWheel>", self.on_mouse_wheel)   # Windows용


    def on_mouse_wheel(self, event):
        if event.delta > 0:
            self.zoom_level *= 1.1
        else:
            self.zoom_level *= 0.9
        if self.zoom_level < 0.1:
            self.zoom_level = 0.1
        elif self.zoom_level > 20.0:
            self.zoom_level = 20.0
        self.update_canvas()

 

원래 위에 처럼 구현돼있었더라면

 

아래 처럼 구현해야 윈도우, 리눅스 둘다 휠이벤트가 동작한다.

 

# 윈도우:  <MouseWheel>
# 리눅스:  <Button-4> (wheel up), <Button-5> (wheel down)
self.canvas.bind("<MouseWheel>", self.on_mouse_wheel)   # Windows용
self.canvas.bind("<Button-4>",   self.on_mouse_wheel)   # Linux용
self.canvas.bind("<Button-5>",   self.on_mouse_wheel)   # Linux용

def on_mouse_wheel(self, event):
    # Windows의 경우: event.delta 가 +120(휠 위), -120(휠 아래) 식으로 들어옴
    # Linux의 경우: event.num == 4(휠 위), 5(휠 아래)
    
    # 1) 휠 위 스크롤?
    if (event.delta > 0) or (event.num == 4):
        self.zoom_level *= 1.1
    # 2) 휠 아래 스크롤?
    elif (event.delta < 0) or (event.num == 5):
        self.zoom_level *= 0.9

    # 최소/최대 줌 제한
    if self.zoom_level < 0.1:
        self.zoom_level = 0.1
    elif self.zoom_level > 20.0:
        self.zoom_level = 20.0

    self.update_canvas()
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함