TkInter: xanelas e botóns

Antes en Python:

  • Biblioteca
  • Método
  • Atributo

TkInter é un GUI para Python, unha Interface Gráfica de Usuario. Con esta biblioteca podemos crear xanelas como interfaces para os programas, obxectos gráficos, e animalos e facer xogos...É decir, temos un Scratch pero máis complicado de programar, máis que nada por ter que crear os sprites.

Unha cousa boa de TkInter é que existe para outras linguaxes de programación como Perl, Ada ou Ruby, polo que podería servirnos para iniciarnos nesas linguaxes.

Se queres un titorial interesante proba este. E se queres consultar aspectos concretos podes usar esta wiki. Nós aquí explicaremos o básico e logo poñeremos exercicios ou proxectos.

É bó perder o tempo programando algo que podemos facer moito máis fácilmente en Scratch?. Pois si, por que ten outras vantaxes, aínda que non se debería empezar a aprender Python por aquí, na nosa opinión.

Nesta páxina veremos:

  1. Instalar e configurar
  2. Primeira e última orde
  3. Estrutura básica dun programa
    • Exercicio:
  4. Crear obxectos básicos
  5. Introducir texto
  6. Proposta de pequeno proxecto

1. Instalar e configurar

Se estás en Linux probablemente terás instalada a biblioteca TkInter, en especial se estás en Python 3. Para outros SO (e a estas alturas de programación deberías estar xa pensando en instalar Linux) busca por internet. Se non a tes podes teclear na consola sudo apt-get install python3-tk para instalala.

Para comprobar que a temos poñemos como primeira liña a orde para importar os métodos de TKinter:

from tkinter import *

Ollo: Cando vexas programas en internet que utilicen from Tkinter, con T maiúscula é que están escritos para Python 2.

Por que non utilizamos a forma habitual import tkinter?. Por comodidade. Se o facemos así, non temos que escribir a palabra do módulo, tkinter, para chamar a un método dela.

Tamén podes atopar en moitos programas de tkinter a seguinte liña:

from tkinter import ttk

Isto é para utilizar funcionalidades novas, das versións de TkInter posteriores á 8.5, (nesta versión foron incorporadas unha morea nova de funcionalidades, chamadas widgets). Se queres ver os widgets básicos de TkInter ou seguir un bó curso (in English) podes empregar esta páxina.

2.Primeira e última orde

Os programas van empezar creando un obxecto: a xanela principal (podemos logo crear outras), coa orde seguinte:

  • xanela = Tk() #podemos darlle o nome que queiramos

En moitos programas que atopes por internet verás que usan o nome de root para a xanela principal. Aquí iremos variando.

E unha das ordes obrigatorias ao final será crear un loop chamando á xanela, para que non desapareza. Isto faise así:

  • xanela.mainloop() #só temos que saber o nome da xanela; poderíamos escribir tamén mainloop() a secas.

Comezo

3.Estrutura básica dun programa

O resto do programa vai ser (normalmente nesta orde):

  • Configuración da xanela (espazo de traballo).
  • Creación de obxectos (sprites, botóns...).
  • Creación de funcións, que poden depender de atributos e parámetros, para que interactuen os obxectos (unha pelota que choca e da un punto ao facelo, por exemplo).
  • Programa principal que chama a eses obxectos.

O problema principal (igual que en calquera biblioteca, por certo) é saber que método aplicar e os posibles atributos das funcións. Para isto o mellor é practicar (obvio) e aplicar o método algorítmico 'Divide e vencerás': descompoñemos o algoritmo en algoritmos máis pequenos e intentamos resolvelos.

Vexamos un exemplo para que non sexa todo tan aburrido. Copia e executa este código, e comproba que a saída é un botón básico:

from tkinter import *    # Carga módulo tk (widgets estándar)
from tkinter import ttk  # Carga ttk (para widgets novos 8.5+)

xanela = Tk()

xanela.geometry('300x200')
xanela.configure(bg = 'beige') #configuración con un atributo, bg, que é o backgorund
xanela.title('Aplicación')

ttk.Button(ventana, text='Fixéchelo!',command=quit).pack(side=BOTTOM)

xanela.mainloop()

Cales serían aquí os subalgoritmos, deixando aparte a primeira e última orde?:

  1. Crear unha xanela de certo tamaño, certa cor e con un título.
  2. Crear un botón interactivo, que ten un texto e que está en certa posición da xanela.

Exercicio:

  1. Modifica o programa para cambiar o nome da xanela, o tamaño, a cor do fondo e o sitio do botón.

Comezo

4. Crear obxectos básicos

a) Método fundamental: pack()

Se te fixaste no código anterior empregamos un método, pack(), que vai saír constantemente. Ven sendo un xestor da xeometría da xanela, e das capas utilizadas. O que fai no caso anterior é incrustar o botón na xanela. Se non o utilizamos non imos ver nada. Poderás ver outros xestores de xeometría en TkInter como place() ou grid().

b)Etiquetas e Botóns

Como sempre, mellor escribir que copiar/pegar. Intenta escribir estes programas e entender os seus apartados.

Obxectivo Código Saída
Etiqueta con texto, non interactivo

Ollo ao método pack()

estruturas secuenciais

 

Inserir imaxe con texto

A imaxe terá que estar no mesmo directorio

estruturas condicionais

Mensaxes de texto configurable

Nesta páxina podes ver os diferentes atributos, etiquetas para configurar o aspecto visual.

estruturas iterativas

 

Dous botóns interactivos, mandan información á terminal

 

 

Botón con texto dinámico

 

 

Botón con opcións (radiobotón)

Ver que creamos unha variable interna, v

 

Caixa de opcións (checkbox)

 

 

Comezo

Exercicios:

  1. Crea un botón personalizado, decorado cunha imaxe, e que mande unha frase/slogan na terminal ao pulsalo.
  2. Crea un RadioBotón que teña 4 opcións. Fai que imprima a opción en pantalla. Averigua como gardar as opcións escollidas nunha lista.

5. Introducir texto

Para introducir texto temos que coñecer o widget Entry(). A partir de aí o resto é sinxelo. A sintaxe básica é:

nome = Entry(ventana,opcións)

As opcións non son obrigatorias, pero darán moitas posibilidades de configuración.

 

Obxectivo Código Saída
Dúas caixas para escribir

Agora estamos a usar grid() en vez de pack()

estruturas secuenciais

 

Comezo

6. Proposta de pequeno proxecto:

  1. Crear unha calculadora básica con botóns. O resultado pode verse na xanela ou na terminal.
  2. Crear un pequeno programa de conversación textual, pero con botóns. Ver exemplo no apartado de estruturas condicionais.

Pygal: gráficas sexys TkInter: xanelas e botóns TkInter 2: debuxar e animar Pygame: videoxogos