10 TKinter
10 TKinter
Raúl Valenzuela
[email protected]
Para crear una interfaz gráfica con tkinter tenemos que hacer1 :
1 Importar el módulo tkinter.
2 Crear la ventana principal.
3 Agregue cualquier número de widgets a la ventana principal.
4 Definir el evento (una función retrollamada) para cada widget.
Por ejemplo: que debe pasar si el usuario pulsa el botón.
5 Esperar hasta que la ventana principal se cierre.
1
Hay excepciones.
Hacer una Ventana Genérica tkinter
1 import t k i n t e r as t k # ” a s ” p a r a d e f i n i r una a b r e v i a t u r a
2 v = t k . Tk ( )
3 v . t i t l e ( 'Mi ventana ' )
4
5 d e f hola ( ) : # d e f i n i r e l evento ( retrollamada )
6 p r i n t ( " Hola Mundo " )
7 b= t k . B ut to n ( v , t e x t='¡ Di hola ! ' , w i d t h=3 0 , command=hola )
8 b . pack() # p o s i c i o n a r e l b o t ón en l a v e n t a n a
9
10 v . mainloop ()
Hay diferentes posibilidades para organizar los widgets en las ventanas principales:
pack(): organizar los widgets en bloques.
grid(): organizar los widgets en una tabla.
place(): organizar los widgets en posiciones especı́ficas.
Un Evento Más Complejo tkinter
1 import t k i n t e r a s t k
2 v = t k . Tk ( )
3 v . t i t l e ( 'Mi ventana ' )
4
5 def hola ( ) :
6 p r i n t ( " Hola Mundo " )
7 f = open ( " adios . txt " , "w" )
8 f . w r i t e ( " Adios !" )
9 f . close ()
10 v. destroy () # La c l a s e Tk o f r e c e e l metodo d e s t r o y
11
12 b= t k . B ut to n ( v , t e x t='¡ Di hola ! ' , w i d t h=3 0 , command=h o l a )
13 b . pack ( )
14
15 v . m a i n l o o p ( )
16
17 # E s t e c ó d i g o s e e j e c u t a d e s p u é s de c e r r a r l a v e n t a n a
18 p r i n t ( " Listo " )
El Widget Button (Botón) tkinter
1 import t k i n t e r a s t k
2 from t k i n t e r import m e s s a g e b o x
3
4 v= t k . Tk ( )
5 v . t i t l e ( 'Mi ventana ' )
6
7 def hola ( ) :
8 i f m e s s a g e b o x . a s k y e s n o ( ' Confirmar ' , '¿ Cerrar app ? ' ) :
9 m e s s a g e b o x . s h o w i n f o ( ' Adios ' , ' Hasta la proxima ! ' )
10 v . destroy ()
11
12 b= t k . B ut to n ( v , t e x t='¡ Di hola ! ' , w i d t h=3 0 , command=h o l a )
13 b . pack ( )
14
15 v . mainloop ()
Mensajes Estándar Sin Ventana Principal tkinter
1 import t k i n t e r a s t k
2 v = t k . Tk ( )
3 v . t i t l e ( ' Rancagua ' )
4
5 t = " Rancagua es una ciudad de Chile y el capital de la \
6 regi ón del Libertador General Bernardo O ' Higgins "
7 m e s sa g e V a r = Message ( v , t e x t=t , w i d t h=2 2 0 )
8 m e s sa g e V a r . c o n f i g ( bg=' lightyellow ' )
9 m e s sa g e V a r . pack ( )
10
11 b = t k . Bu tt on ( v , t e x t=' Cerrar ' , command=v . d e s t r o y )
12 b . pack ( )
13
14 v . mainloop ()
Nota 1: se puede utilizar la barra invertida (backslash) \ para usar más de una
lı́nea para comandos largos o texto largo.
Nota 2: en tkinter el método config puede ser utilizado para definir y
reemplazar argumentos opcionales.
Mostrar Etiqueta (Label) tkinter
1 from t k i n t e r import ∗
2 v = Tk ( )
3 v . t i t l e ( ' Rancagua ' )
4
5 w = L a b e l ( v , t e x t=' Pulsar el bot ón: ' , w i d t h=3 0 , a n c h o r='e ' )
6 w . g r i d ( row=0 , column=0 ) # o r g a n i z a r w i d g e t s en una t a b l a
7
8 def a c c i o n ( ) :
9 w [ ' text ' ] = ' Otra vez : '
10
11 b = Butt on ( v , t e x t='¡ Di hola ! ' , w i d t h=3 0 , command=a c c i o n )
12 b . g r i d ( row=0 , column=1 ) # o r g a n i z a r w i d g e t s en una t a b l a
13
14 v . mainloop ()
1 from t k i n t e r import ∗
2 v = Tk ( )
3 v . t i t l e ( ' Precio Alimento ' )
4
5 L a b e l ( v , t e x t=' Alimento : ' ) . g r i d ( row=0 )
6 L a b e l ( v , t e x t=' Precio : ' ) . g r i d ( row=1 )
7
8 nombre = E n t r y ( v )
9 p r e c i o = Entry ( v )
10 nombre . g r i d ( row=0 , column=1 )
11 p r e c i o . g r i d ( row=1 , column=1 )
12
13 def a c c i o n ( ) :
14 p r i n t ( nombre . g e t ( ) + ': ' + p r e c i o . g e t ( ) )
15 nombre . d e l e t e ( 0 , END)
16 p r e c i o . d e l e t e ( 0 , END)
17 b = Butt on ( v , t e x t=' Listo ' , w i d t h=3 0 , command=a c c i o n )
18 b . g r i d ( row=2 , c o l u m n s p a n=2 )
19
20 v . mainloop ()
Casilla de Verificación (Checkbox) tkinter
1 from t k i n t e r import ∗
2 v = Tk ( )
3 v . t i t l e ( ' Seleccionar Alimentos ' )
4 v . g e o m e t r y ( "200x100" )
5
6 o1 = B o o l e a n V a r ( )
7 C h e c k b u t t o n ( v , t e x t='pan ' , v a r i a b l e=o1 ) . pack ( )
8 o2 = B o o l e a n V a r ( )
9 C h e c k b u t t o n ( v , t e x t=' leche ' , v a r i a b l e=o2 ) . pack ( )
10 o3 = B o o l e a n V a r ( )
11 C h e c k b u t t o n ( v , t e x t=' jugo ' , v a r i a b l e=o3 ) . pack ( )
12
13 v . mainloop ()
14
15 p r i n t ( o1 . g e t ( ) , o2 . g e t ( ) , o3 . g e t ( ) )
La Ancla (anchor) tkinter
1 from t k i n t e r import ∗
2 v = Tk ( )
3 v . t i t l e ( ' Seleccionar Alimentos ' )
4 v . g e o m e t r y ( "200x100" )
5
6 o1 = B o o l e a n V a r ( )
7 C h e c k b u t t o n ( v , t e x t='pan ' , v a r i a b l e=o1 ) . pack ( a n c h o r='w ' )
8 o2 = B o o l e a n V a r ( )
9 C h e c k b u t t o n ( v , t e x t=' leche ' , v a r i a b l e=o2 ) . pack ( a n c h o r='w ' )
10 o3 = B o o l e a n V a r ( )
11 C h e c k b u t t o n ( v , t e x t=' jugo ' , v a r i a b l e=o3 ) . pack ( a n c h o r='w ' )
12
13 v . mainloop ()
14
15 p r i n t ( o1 . g e t ( ) , o2 . g e t ( ) , o3 . g e t ( ) )
Posibles valores para anchor son: n, ne, e, se, s, sw, w, nw, center
(n = north, e = east, s = south, w = west)
Botón de opción (Radio button) tkinter
1 from t k i n t e r import ∗
2 v = Tk ( )
3 v . t i t l e ( ' Seleccionar un Alimento ' )
4 v . g e o m e t r y ( "200x100" )
5
6 o = IntVar ()
7 R a d i o b u t t o n ( v , t e x t='pan ' , v a r i a b l e=o , v a l u e=1 ) . pack ( )
8 R a d i o b u t t o n ( v , t e x t=' leche ' , v a r i a b l e=o , v a l u e=2 ) . pack ( )
9 R a d i o b u t t o n ( v , t e x t=' jugo ' , v a r i a b l e=o , v a l u e=3 ) . pack ( )
10
11 v . mainloop ()
12
13 print (o . get () )
Nota: por ser caso que el usuario no selecciona ninguna opción el valor sera 0.
Otros Elementos de Interacción tkinter
El último widget que veremos se llama canvas y parece una hoja para dibujar.
Se usa para dibujar objetos geométricos.
Una Hoja para Dibujar tkinter
(240, 100)
Dibujar una Linea tkinter
1 from t k i n t e r import ∗
2 v = Tk ( )
3 c = Canvas ( v , w i d t h=2 4 0 , h e i g h t=1 0 0 )
4 c . pack ( )
Si queremos dibujar una linea, tenemos que dar la coordenada (x1 , y1 ) donde
empieza la linea y la coordenada (x2 , y2 ) donde termina la linea:
1 c . c r e a t e l i n e ( 40 , 30 , 200 , 70 )
(40, 30)
(200, 70)
(240, 100)
Dibujar Objetos Geométricos tkinter
1 from t k i n t e r import ∗
2 v = Tk ( )
3 v . t i t l e ( 'IN1007' )
4
5 c = Canvas ( v , w i d t h=2 4 0 , h e i g h t=1 0 0 )
6 c . pack ( )
7
8 c . c r e a t e l i n e ( 20 , 20 , 220 , 80 )
9 c . c r e a t e l i n e ( 20 , 80 , 220 , 20 , f i l l =" blue " , d a s h =(4 , 4 ) )
10
11 c . c r e a t e r e c t a n g l e ( 80 , 40 , 160 , 60 , f i l l ="# ffaaff " )
12
13 Button ( v , t e x t=' cerrar ' , command=v . d e s t r o y ) . pack ( )
14
15 v . mainloop ()
Dibujar Objetos Geométricos tkinter
1 from t k i n t e r import ∗
2 v = Tk ( )
3 v . t i t l e ( 'IN1007' )
4
5 c = Canvas ( v , w i d t h=2 4 0 , h e i g h t=1 0 0 )
6 c . pack ( )
7
8 c . c r e a t e r e c t a n g l e ( 80 , 40 , 160 , 60 , f i l l ="# ffaaff " )
9
10 c . c r e a t e l i n e ( 20 , 20 , 220 , 80 )
11 c . c r e a t e l i n e ( 20 , 80 , 220 , 20 , f i l l =" blue " , d a s h =(4 , 4 ) )
12
13 Button ( v , t e x t=' cerrar ' , command=v . d e s t r o y ) . pack ( )
14
15 v . mainloop ()
Dibujar Objetos Geométricos tkinter
1 from t k i n t e r import ∗
2 v = Tk ( )
3 v . t i t l e ( 'IN1007' )
4
5 c = Canvas ( v , w i d t h=2 4 0 , h e i g h t=1 0 0 )
6 c . pack ( )
7
8 c . c r e a t e o v a l ( 80 , 40 , 160 , 60 , f i l l ="# ffaaff " )
9
10 c . c r e a t e l i n e ( 20 , 20 , 220 , 80 )
11 c . c r e a t e l i n e ( 20 , 80 , 220 , 20 , f i l l =" blue " , d a s h =(4 , 4 ) )
12
13 Button ( v , t e x t=' cerrar ' , command=v . d e s t r o y ) . pack ( )
14
15 v . mainloop ()
El Widget Canvas tkinter
https://wiki.python.org/moin/TkInter
https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/index.html
https://www.geeksforgeeks.org/python-gui-tkinter/