Resumo : neste tutorial, você aprenderá sobre o widget Tkinter Canvas e como desenhar vários objetos nele.
Introdução ao widget de tela Tkinter
O widget canvas é o widget mais flexível do Tkinter. O widget Canvas permite criar qualquer coisa, desde widgets personalizados até interfaces de usuário completas.
O widget de tela é uma área em branco na qual você pode desenhar figuras, criar texto e colocar imagens.
Para criar um widget de tela, você cria uma nova instância da Canvas
classe do tkinter
módulo. Por exemplo, o seguinte procedimento cria uma tela em uma janela:
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()
Linguagem de código: Python ( python )
Saída:
Como funciona.
Primeiro, crie um novo Canvas
objeto com largura 600px
, altura 400px
e fundo white
:
canvas = tk.Canvas(root, width=600, height=400, bg='white')
Linguagem de código: Python ( python )
Segundo, coloque o canvas
objeto na root
janela usando a pack()
geometria.
canvas.pack(anchor=tk.CENTER, expand=True)
Linguagem de código: Python ( python )
Uma tela possui um sistema de coordenadas como uma janela. A origem (0,0)
está no canto superior esquerdo. A direção do eixo x é da esquerda para a direita e a direção do eixo y é de cima para baixo.
Adicionando itens a uma tela usando métodos create_*
Um objeto canvas possui vários add_*
métodos. Esses métodos permitem colocar itens nele. Os itens são:
Item | Método |
---|---|
Linha | criar_linha() |
Retângulo | criar_retângulo() |
oval | criar_oval() |
Arco | criar_arco() |
Polígono | criar_polígono() |
Texto | criar_texto(() |
Imagem | criar imagem() |
Criando uma linha
Para criar uma linha, você usa o create_line()
método. Por exemplo, o seguinte cria uma linha vermelha:
canvas.create_line((50, 50), (100, 100), width=4, fill='red')
Linguagem de código: Python ( python )
Saída:
Neste exemplo, uma linha consiste em dois pontos (50,50)
e (100,100)
. O create_line()
método conecta os pontos entre esses pontos.
O width
argumento especifica a largura da linha. E o fill
argumento especifica a cor da linha.
Criando um retângulo
Para desenhar um retângulo, você usa o create_rectangle()
método. Por exemplo:
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()
Linguagem de código: Python ( python )
Saída:
Criando um oval
Para desenhar uma forma oval, você usa o create_oval()
método. Por exemplo:
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()
Linguagem de código: Python ( python )
Saída:
Como um retângulo, uma forma oval assume a coordenada dos cantos superior esquerdo e inferior direito de sua caixa delimitadora . Uma caixa delimitadora de uma forma oval é o menor retângulo que contém a forma oval.
Neste exemplo, os cantos superior esquerdo e inferior direito da caixa delimitadora são (50,150)
e (200,350)
.
Criando um polígono
Para desenhar um polígono, você usa o create_polygon()
método. Por exemplo:
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()
Linguagem de código: Python ( python )
Saída:
Criando um texto
Para colocar um texto em uma tela, você usa o create_text()
método. Por exemplo:
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()
Linguagem de código: Python ( python )
Saída:
Crie um arco
Para desenhar um arco em uma tela, você usa o create_arc()
método. Por exemplo:
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()
Linguagem de código: Python ( python )
Saída:
Crie uma imagem
Para colocar uma imagem em uma tela, você usa o create_image()
método. Por exemplo:
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()
Linguagem de código: Python ( python )
Saída:
Observe que se você passar diretamente PhotoImage
para o create_image()
método, a imagem não será exibida porque será automaticamente coletada como lixo .
O código a seguir não funcionará:
canvas.create_image(
(100, 100),
image=tk.PhotoImage(file='python.gif')
)
Linguagem de código: Python ( python )
Vinculando um evento ao item
Todo o create_*
método retorna um valor de string que identifica o item no contexto do Canvas
objeto. E você pode usar esse valor para vincular um evento ao item.
Para vincular um evento a um item, você usa o tag_bind()
método do Canvas
objeto. Por exemplo:
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,
'<Button-1>',
lambda e: canvas.delete(image_item)
)
root.mainloop()
Linguagem de código: Python ( python )
Neste exemplo, vinculamos o clique esquerdo do mouse ao item da imagem. Se você clicar na imagem, será executado o lambda que remove a imagem da tela.
Resumo
- Uma tela é uma área em branco onde você pode desenhar itens como linhas, retângulos, formas ovais, arcos, textos e imagens.
- Use
Canvas()
para criar um novo objeto de tela. - Use
tag_bind()
o método para vincular um evento a um item em uma tela.