Tkinter 캔버스(Canvas) 위젯이란?
캔버스 위젯은 Tkinter에서 가장 다재다능한 위젯 중 하나로, 애플리케이션 안에서 일러스트레이션을 제작하거나 도형, 호(arc), 이미지 등 복잡한 레이아웃을 그릴 때 사용됩니다. 캔버스 위젯을 생성하려면 canvas(root, **options) 형태의 생성자를 호출하면 됩니다.
또한 팩토리 함수(factory function)를 활용하면 캔버스 위에 텍스트, 이미지, 호 등 다양한 요소를 자유롭게 배치하고 정의할 수 있습니다.
버튼 클릭으로 새 캔버스 열기
애플리케이션의 작업 흐름을 일관되게 유지하면서 기존 캔버스를 기반으로 또 다른 캔버스를 만들어야 하는 경우가 있습니다. 이럴 때는 버튼을 배치하고, 버튼이 클릭될 때 새로운 캔버스를 생성하는 이벤트 핸들러를 호출하도록 구성하면 됩니다.
이해를 돕기 위해 기본 캔버스 위젯과 함께, 클릭하면 새로운 캔버스 창을 열어 갱신해 주는 버튼을 만들어 보겠습니다.
예제 코드
# 필요한 라이브러리 임포트
from tkinter import *
from tkinter import ttk
# tkinter 윈도우 인스턴스 생성
win = Tk()
win.geometry("700x350")
# 스타일 클래스 인스턴스 생성
style = ttk.Style(win)
def open_new_win():
top = Toplevel(win)
canvas1 = Canvas(canvas, height=180, width=100, bg="#aaaffe")
canvas1.pack()
Label(canvas1, text="You can modify this text", font='Helvetica 18 bold').pack()
# 캔버스 위젯 생성
canvas = Canvas(win, height=400, width=300)
canvas.pack()
# 버튼 위젯 생성
button = ttk.Button(canvas, text="Open Window", command=open_new_win)
button.pack(pady=30)
win.mainloop()실행 결과
위 코드를 실행하면 "Open Window" 버튼이 포함된 창이 화면에 나타납니다.

버튼을 클릭하면 새로운 캔버스가 열리고, 기본 캔버스 창 위에 메시지가 표시됩니다. 이처럼 Toplevel 윈도우와 캔버스를 조합하면 사용자의 동작에 따라 여러 캔버스를 유연하게 추가하고 관리할 수 있습니다.
