Tkinter Canvas

2024. 3. 11. 19:13GUI/tkinter

요약 : 이 튜토리얼에서는 Tkinter Canvas 위젯과 그 위에 다양한 개체를 그리는 방법에 대해 배웁니다.

Tkinter 캔버스 위젯 소개

캔버스 위젯은 Tkinter에서 가장 유연한 위젯입니다. 캔버스 위젯을 사용하면 사용자 정의 위젯부터 완전한 사용자 인터페이스까지 무엇이든 만들 수 있습니다.

캔버스 위젯은 그림을 그리고, 텍스트를 만들고, 이미지를 배치할 수 있는 빈 영역입니다.

캔버스 위젯을 만들려면, tkinter 모듈에서 Canvas 클래스의 새 인스턴스를 만듭니다. 예를 들어 다음은 창에 캔버스를 만듭니다.

In [1]:
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()메서드를 사용합니다. 예를 들어:

In [4]:
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()방법을 사용합니다. 예를 들어:

In [5]:
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()방법을 사용합니다. 예를 들어:

In [6]:
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()메서드를 사용합니다. 예를 들어:

In [8]:
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()방법을 사용합니다. 예를 들어:

In [9]:
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