본문 바로가기

구현

파이썬으로 간단한 그림판 만들기 (3단계: 선 굵기)

▣ 3단계: 선 굵기 조절 기능 추가  
이번 단계에서는 사용자가 선의 굵기를 조절할 수 있도록 `Scale` 위젯(슬라이더)을 추가합니다.   

✔ 코드   

import tkinter as tk

def start_draw(event):
    global last_x, last_y
    last_x, last_y = event.x, event.y

def draw(event):
    global last_x, last_y
    width = brush_size.get()
    canvas.create_line(last_x, last_y, event.x, event.y, fill='black', width=width)
    last_x, last_y = event.x, event.y

def update_from_slider(value):
    """슬라이더가 움직였을 때 드롭다운도 함께 업데이트"""
    dropdown_var.set(int(value))  # 드롭다운 값 갱신

def update_from_dropdown(*args):
    """드롭다운 선택 시 슬라이더도 함께 업데이트"""
    brush_size.set(dropdown_var.get())  # 슬라이더 값 갱신

root = tk.Tk()
root.title("그림판")

# 상단 프레임
top_frame = tk.Frame(root)
top_frame.pack(side="top", fill="x")

# 선 굵기 설정 변수
brush_size = tk.IntVar(value=2)

# 슬라이더
slider = tk.Scale(top_frame, from_=1, to=10, orient="horizontal", variable=brush_size,
                  label="선 굵기 (슬라이더)", command=update_from_slider)
slider.pack(side="left", padx=10, pady=5)

# 드롭다운 옵션
dropdown_var = tk.IntVar(value=2)
dropdown_options = [1, 2, 4, 6, 8, 10]
dropdown_menu = tk.OptionMenu(top_frame, dropdown_var, *dropdown_options)
dropdown_menu.config(width=10)
dropdown_var.trace_add("write", update_from_dropdown)
dropdown_menu.pack(side="left", padx=10, pady=5)

# 캔버스
canvas = tk.Canvas(root, bg="white", width=800, height=600)
canvas.pack(fill="both", expand=True)

# 마우스 이벤트 바인딩
canvas.bind("<Button-1>", start_draw)
canvas.bind("<B1-Motion>", draw)

root.mainloop()

 

✔ 설명

  • 슬라이더에서 값을 바꾸면 update_from_slider()가 드롭다운 값을 자동 반영합니다.
  • 드롭다운에서 값을 선택하면 update_from_dropdown()이 슬라이더를 자동으로 갱신합니다.
  • 변수는 IntVar로 공유하여 두 위젯을 연결합니다.



✔ 결과  

슬라이더를 조절한 뒤 마우스로 선을 그리면, 선택한 굵기에 맞게 선이 그려집니다.