Tela Tkinter

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 Canvasclasse do tkintermó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 Canvasobjeto com largura 600px, altura 400pxe fundo white:

canvas = tk.Canvas(root, width=600, height=400, bg='white')Linguagem de código:  Python  ( python )

Segundo, coloque o canvasobjeto na rootjanela 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 widthargumento especifica a largura da linha. E o fillargumento 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 PhotoImagepara 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 Canvasobjeto. 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 Canvasobjeto. 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *