2024. 3. 11. 19:13ㆍGUI/tkinter
요약 : 이 튜토리얼에서는 Tkinter Canvas 위젯과 그 위에 다양한 개체를 그리는 방법에 대해 배웁니다.
Tkinter 캔버스 위젯 소개
캔버스 위젯은 Tkinter에서 가장 유연한 위젯입니다. 캔버스 위젯을 사용하면 사용자 정의 위젯부터 완전한 사용자 인터페이스까지 무엇이든 만들 수 있습니다.
캔버스 위젯은 그림을 그리고, 텍스트를 만들고, 이미지를 배치할 수 있는 빈 영역입니다.
캔버스 위젯을 만들려면, tkinter 모듈에서 Canvas 클래스의 새 인스턴스를 만듭니다. 예를 들어 다음은 창에 캔버스를 만듭니다.
import tkinter as tk
root = tk.Tk()
root.geometry('800x600')
root.title('Canvas Demo')
canvas = tk.Canvas(root, width=600, height=400, bg='white')
canvas.pack(anchor=tk.CENTER, expand=True)
root.mainloop()

동작 방식.
먼저 너비 600px, 높이 400px및 white 배경을 사용하여 새 Canvas 객체를 만듭니다.
canvas = tk.Canvas(root, width=600, height=400, bg='white')
둘째, pack() 형상을 사용하여 root 창에 canvas 개체를 배치합니다.
canvas.pack(anchor=tk.CENTER, expand=True)
캔버스에는 창과 같은 좌표계가 있습니다. 원점 (0,0)은 왼쪽 상단에 있습니다. x축의 방향은 왼쪽에서 오른쪽이고, y축의 방향은 위에서 아래입니다.
create_* 메소드를 사용하여 캔버스에 항목 추가
캔버스 객체에는 다양한 add_* 메서드가 있습니다. 이 방법을 사용하면 항목을 배치할 수 있습니다. 항목은 다음과 같습니다
선 | create_line() |
직사각형 | create_사각형() |
타원형 | create_타원형() |
호 | create_arc() |
다각형 | create_polygon() |
텍스트 | create_text(() |
영상 | create_image() |
라인 만들기
선을 만들려면 이 create_line()방법을 사용합니다. 예를 들어 다음은 빨간색 선을 만듭니다.
canvas.create_line((50, 50), (100, 100), width=4, fill='red')

이 예에서 선은 두 개의 점 (50,50)과 (100,100)로 구성됩니다. 이 create_line() 메서드는 이러한 점 사이의 점을 연결합니다.
인수 width는 선의 너비를 지정합니다. 그리고 fill인수는 선의 색상을 지정합니다
직사각형 만들기
직사각형을 그리려면 create_rectangle()메서드를 사용합니다. 예를 들어:
import tkinter as tk
root = tk.Tk()
root.geometry('800x600')
root.title('Canvas Demo - Rectangle')
canvas = tk.Canvas(root, width=600, height=400, bg='white')
canvas.pack(anchor=tk.CENTER, expand=True)
canvas.create_rectangle((100, 100), (300, 300), fill='green')
root.mainloop()

타원 만들기
타원을 그리려면 create_oval()방법을 사용합니다. 예를 들어:
import tkinter as tk
root = tk.Tk()
root.geometry('800x600')
root.title('Canvas Demo - Oval')
canvas = tk.Canvas(root, width=600, height=400, bg='white')
canvas.pack(anchor=tk.CENTER, expand=True)
points = (
(50, 150),
(200, 350),
)
canvas.create_oval(*points, fill='purple')
root.mainloop()

직사각형과 마찬가지로 타원은 경계 상자 의 왼쪽 상단 및 오른쪽 하단 모서리의 좌표를 사용합니다 . 타원의 경계 상자는 타원을 포함하는 가장 작은 직사각형입니다.
이 예에서 경계 상자의 왼쪽 위 모서리와 오른쪽 아래 모서리는 (50,150)및 (200,350) 입니다.

다각형 만들기
다각형을 그리려면 create_polygon()방법을 사용합니다. 예를 들어:
import tkinter as tk
root = tk.Tk()
root.geometry('800x600')
root.title('Canvas Demo - Polygon')
canvas = tk.Canvas(root, width=600, height=400, bg='white')
canvas.pack(anchor=tk.CENTER, expand=True)
# create a polygon
points = (
(100, 300),
(200, 200),
(300, 300),
)
canvas.create_polygon(*points, fill='blue')
root.mainloop()

텍스트 만들기
캔버스에 텍스트를 배치하려면 create_text()메서드를 사용합니다. 예를 들어:
import tkinter as tk
root = tk.Tk()
root.geometry('800x600')
root.title('Canvas Demo - Text')
canvas = tk.Canvas(root, width=600, height=400, bg='white')
canvas.pack(anchor=tk.CENTER, expand=True)
canvas.create_text(
(300, 100),
text="Canvas Demo",
fill="orange",
font='tkDefaeultFont 24'
)
root.mainloop()

호 만들기
캔버스에 호를 그리려면 create_arc()방법을 사용합니다. 예를 들어:
import tkinter as tk
from turtle import width
root = tk.Tk()
root.geometry('800x600')
root.title('Canvas Demo - Arc')
canvas = tk.Canvas(root, width=600, height=600, bg='white')
canvas.pack(anchor=tk.CENTER, expand=True)
canvas.create_arc((10, 10), (200, 200), style=tk.PIESLICE, width=2)
canvas.create_arc((10, 200), (200, 390), style=tk.CHORD, width=2)
canvas.create_arc((10, 400), (200, 590), style=tk.ARC, width=2)
root.mainloop()

이미지 만들기
캔버스에 이미지를 배치하려면 create_image()메서드를 사용합니다. 예를 들어:
주의 : python.gif 파일을 임의로 생성해서 실행 시키세요!
import tkinter as tk
root = tk.Tk() root.geometry('800x600') root.title('Canvas Demo - Image')
canvas = tk.Canvas(root, width=600, height=400, bg='white') canvas.pack(anchor=tk.CENTER, expand=True)
python_image = tk.PhotoImage(file='python.gif') canvas.create_image( (100, 100), image=python_image )
root.mainloop()

create_image() 메소드에 PhotoImage가 직접 전달하면 이미지가 자동으로 가비지 수집되므로 이미지가 표시되지 않습니다.
다음 코드는 작동하지 않습니다.
canvas.create_image(
(100, 100),
image=tk.PhotoImage(file='python.gif')
)
항목에 이벤트 바인딩
모든 create_* 메소드는 Canvas 객체의 컨텍스트에서 항목을 식별하는 문자열 값을 반환합니다. 그리고 이 값을 사용하여 이벤트를 항목에 바인딩할 수 있습니다.
이벤트를 항목에 바인딩하려면, Canvas 개체의 tag_bind() 메서드를 사용합니다. 예를 들어:
import tkinter as tk
root = tk.Tk() root.geometry('800x600') root.title('Canvas Demo - Binding Event')
canvas = tk.Canvas(root, width=600, height=400, bg='white') canvas.pack(anchor=tk.CENTER, expand=True)
python_image = tk.PhotoImage(file='python.gif') image_item = canvas.create_image( (100, 100), image=python_image ) canvas.tag_bind( image_item, '', lambda e: canvas.delete(image_item) )
root.mainloop()
이 예에서는 왼쪽 마우스 클릭을 이미지 항목에 바인딩합니다. 이미지를 클릭하면 캔버스에서 이미지를 제거하는 람다가 실행됩니다.
요약
- 캔버스는 선, 직사각형, 타원, 호, 텍스트, 이미지 등의 항목을 그릴 수 있는 빈 영역입니다.
- Canvas()는 새 캔버스 개체를 만드는 데 사용됩니다 .
- tag_bind() 메서드를 사용하여 이벤트를 캔버스의 항목에 바인딩합니다.
'GUI > tkinter' 카테고리의 다른 글
Tkinter Object-Oriented Window (0) | 2024.03.13 |
---|---|
Tkinter Cursors (0) | 2024.03.12 |
Tkinter Treeview (0) | 2024.03.10 |
Tkinter Notebook (0) | 2024.03.09 |
Tkinter Progressbar (0) | 2024.03.08 |