캔버스(Canvas) 위젯은 Tkinter 라이브러리에서 가장 활용도가 높은 위젯 중 하나입니다. 캔버스를 사용하면 다양한 도형과 호(arc), 객체를 자유롭게 그릴 수 있으며, 이를 응용한 애니메이션 효과까지 손쉽게 구현할 수 있습니다.
Tkinter 캔버스 위에 버튼을 배치하는 방법은 생각보다 간단합니다. 핵심은 Button 또는 ttk.Button 생성자를 호출할 때 부모(parent) 위젯으로 일반 프레임 대신 캔버스를 지정하는 것입니다. 이렇게 하면 버튼이 캔버스의 자식 위젯으로 등록되어 캔버스 영역 안에 표시됩니다.
예제 코드
아래 예제는 캔버스 위젯 안에 라벨과 버튼을 함께 배치하고, 버튼을 클릭하면 프로그램이 종료되도록 구현한 코드입니다.
# 필요한 라이브러리 임포트
from tkinter import *
from tkinter import ttk
# Tkinter 프레임 인스턴스 생성
win = Tk()
# 프레임 크기 설정
win.geometry("700x350")
# 프로그램 종료 함수 정의
def exit_program():
win.destroy()
# 캔버스 위젯 추가
canvas = Canvas(win, width=350)
# 캔버스 안에 라벨 위젯 추가
label = Label(canvas, text="Click the Button to Exit", font=('Helvetica 17 bold'))
label.pack(pady=30)
# 캔버스 위젯 안에 버튼 생성
ttk.Button(canvas, text="Exit", command=exit_program).pack()
canvas.pack()
win.mainloop()
실행 결과
위 코드를 실행하면 캔버스 내부에 버튼이 배치된 창이 화면에 나타납니다.

Exit 버튼을 클릭하면 destroy() 메서드가 호출되어 창이 닫히고 프로그램이 정상적으로 종료됩니다.
참고로, 캔버스에 위젯을 배치할 때는 pack() 대신 create_window() 메서드를 사용하는 방법도 있습니다. 이 방식은 위젯을 캔버스 좌표계의 특정 위치에 정밀하게 배치해야 할 때 특히 유용합니다.