Skip to content

Commit b940886

Browse files
authored
Add files via upload
0 parents  commit b940886

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+1182
-0
lines changed

README.md

+121
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
# Tkinter
2+
Tkinter es una librería de Python que permite crear interfaz gráfica de usuario (GUI en inglés). Es la librería que viene por defecto con la instalación de Python; esto no significa que otras alternativas, como por ejemplo PyQt, sean más potentes que Tkinter.
3+
4+
## GUI con Tkinter
5+
El primer paso para crear una GUI es crear la ventana principal como se muestra en el siguiente código:
6+
7+
```python
8+
import tkinter as tk
9+
10+
ventana = tk.Tk()
11+
ventana.mainloop()
12+
```
13+
14+
El resultado es el siguiente:
15+
16+
![Ventana Tkinter](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/ventana.png)
17+
18+
Un programa solo puede tener una `Tk`, debido a que es la raiz del programa y el primer widget que se debe crear; por lo tanto, cerrar la `Tk` cerraría la GUI. Existen otro tipo de ventanas llamadas `Toplevel` que son ventanas de la aplicación, la diferencia con la `Tk` es que al cerrar una ventana `Toplevel` destruirá todos los widgets secundarios colocados en esa ventana pero no cerrará el programa.
19+
20+
Una vez se tiene la ventana principal, lo siguiente es agregar los botones, entradas, labels y demás widgets que necesitemos. Para esto, Tkinter cuenta con tres mecanismos para gestionar la geometría de los widgets de nuestra GUI: los métodos `pack()`, `grid()` y `place()`.
21+
22+
### Pack
23+
Este mecanismo para gestionar la geometría de los widgets los organiza en bloques antes de ubicarlos en el widget principal. Veamos un ejemplo simple con algunos botones:
24+
25+
```python
26+
import tkinter as tk
27+
28+
ventana = tk.Tk()
29+
30+
boton1 = tk.Button(ventana, text="1")
31+
boton1.pack(side="top")
32+
boton2 = tk.Button(ventana, text="2")
33+
boton2.pack(side="top")
34+
boton3 = tk.Button(ventana, text="3")
35+
boton3.pack(side="left")
36+
boton4 = tk.Button(ventana, text="4")
37+
boton4.pack(side="bottom")
38+
39+
ventana.mainloop()
40+
```
41+
![ventana botones pack](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/ventanapack.png)
42+
43+
Se puede observar que se respeta el orden en que se "empacan" los widgets. Esto se observa claramente con los botones 1 y 2, los cuales tienen `side = "top"`, como el botón 1 está primero, se respeta y queda sobre el botón 2 que después queda sobre los widgets que se ubiquen después. Es un método muy útil cuando se va a crear una aplicación con pocos widgets.
44+
45+
[Aquí](https://www.tutorialspoint.com/python/tk_pack.htm) para ver más sobre el método pack.
46+
47+
### Grid
48+
Este mecanismo para gestionar la geometría de los widgets los organiza en una tabla en el widget principal. Veamos el ejemplo anterior con este método:
49+
50+
```python
51+
import tkinter as tk
52+
53+
ventana = tk.Tk()
54+
55+
boton1 = tk.Button(ventana, text="1")
56+
boton1.grid(row=0, column=0)
57+
boton2 = tk.Button(ventana, text="2")
58+
boton2.grid(row=1, column=1)
59+
boton3 = tk.Button(ventana, text="3")
60+
boton3.grid(row=2, column=2)
61+
boton4 = tk.Button(ventana, text="4")
62+
boton4.grid(row=3, column=3)
63+
64+
ventana.mainloop()
65+
```
66+
![ventana botones grid](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/ventanagrid.png)
67+
68+
Este método permite ubicar los widgets indicando la fila y la columna. Por defecto, el tamaño de las filas y columnas está dado por los widgets que estén ubicados en ellas, pero es posible cambiar el tamaño y combinar filas o columnas. Este método es muy útil cuando las aplicaciones contienen muchos widgets.
69+
70+
[Aquí](https://www.tutorialspoint.com/python/tk_grid.htm) para ver más sobre el método grid.
71+
72+
### Place
73+
Este mecanismo para gestionar la geometría de los widgets permite ubicarlos en una posición específica en el widget principal. continuando con el ejemplo anterior:
74+
75+
```python
76+
import tkinter as tk
77+
78+
ventana = tk.Tk()
79+
80+
boton1 = tk.Button(ventana, text="1")
81+
boton1.place(x=0, y=0)
82+
boton2 = tk.Button(ventana, text="2")
83+
boton2.place(x=100, y=0)
84+
boton3 = tk.Button(ventana, text="3")
85+
boton3.place(x=100, y=100)
86+
boton4 = tk.Button(ventana, text="4")
87+
boton4.place(x=0, y=100)
88+
89+
ventana.mainloop()
90+
```
91+
![ventana botones place](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/ventanaplace.png)
92+
93+
Este método tiene la ventaja de que permite ubicar exactamente donde se quiere los widgets, pero hay que tener cuidado con su tamaño. Cuando son muchos widgets se vuelve problemático ubicarlos todos.
94+
95+
[Aquí](https://www.tutorialspoint.com/python/tk_place.htm) para ver más sobre el método place.
96+
97+
## Widgets Tkinter
98+
Tkinter cuenta con un gran número de widgets, a continuación están listados los más usados (seleccionar para ver ejemplo de cada uno):
99+
- [Button.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/button/button.md)
100+
- [Canvas.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/canvas/canvas.md)
101+
- [Checkbutton.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/checkbutton/checkbutton.md)
102+
- [ColorchooserP.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/colorchooser/colorchooser.md)
103+
- [Combobox.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/combobox/combobox.md)
104+
- [Entry.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/entry/entry.md)
105+
- [FiledialogP.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/filedialog/filedialog.md)
106+
- [Frame.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/frame/frame.md)
107+
- [Label.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/label/label.md)
108+
- [Labelframe.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/labelframe/labelframe.md)
109+
- [Listbox.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/listbox/listbox.md)
110+
- [Menu.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/menu/menu.md)
111+
- [Menubutton.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/menubutton/menubutton.md)
112+
- [Message.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/message/message.md)
113+
- [MessageboxP.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/messagebox/messagebox.md)
114+
- [Notebook.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/notebook/notebook.md)
115+
- [Panedwindow.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/panedwindow/panedwindow.md)
116+
- [Progressbar.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/progressbar/progressbar.md)
117+
- [Radiobutton.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/radiobutton/radiobutton.md)
118+
- [Scale.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/scale/scale.md)
119+
- [Scrollbar.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/scrollbar/scrollbar.md)
120+
- [Spinbox.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/spinbox/spinbox.md)
121+
- [Text.](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/text/text.md)

ventana.png

1.58 KB
Loading

ventanagrid.png

1.44 KB
Loading

ventanapack.png

1.56 KB
Loading

ventanaplace.png

2.43 KB
Loading

widgets/button/button.md

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Tkinter Button
2+
Permite agregar botones a la GUI. Estos botones pueden mostrar una imagen o texto que indiquen su función y normalmente se conectan a una función o método que es llamado cuando el botón es presionado.
3+
4+
## Ejemplo
5+
6+
```python
7+
# -*- coding: utf-8 -*-
8+
"""
9+
Ejemplo de ventana básico con botón que abre una ventana de mensaje
10+
11+
"""
12+
#Importamos las librerías necesarias
13+
import tkinter as tk
14+
15+
ventana = tk.Tk() #Crea la ventana principal
16+
ventana.geometry("200x200") #Tamaño de la ventana en pixeles
17+
18+
def accion():
19+
tk.messagebox.showinfo("Título","Mensaje") #Crea la ventana del mensaje
20+
21+
#Crea el botón y lo conecta con la función
22+
boton = tk.Button(ventana,text="Realizar acción",command=accion)
23+
boton.place(x=100,y=100) #Lo ubica en la ventana principal (pixeles)
24+
#boton.pack(side="bottom") #(Arriba, abajo, derecha, izquierda)
25+
#boton.grid(row=0, column=0) #(Fila y columna)
26+
27+
ventana.mainloop()
28+
```
29+
30+
El resultado es el siguiente:
31+
32+
![ventana button](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/button/ventanabutton.png)
33+
34+
Al presionar el botón se ejecuta la función `accion` que abre la siguiente ventana:
35+
36+
![ventana mensaje](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/button/mensajebutton.png)
37+
38+
Esta es una ventana predeterminada de tkinter que permite cambiar el título y el mensaje que aparece en ella.
39+
40+
La ventana principal se crea con `tk.Tk` y se cambia su tamaño con `ventana.geometry`. Luego, se crea el botón con `tk.Button` indicando el widget que lo va a contener, en nuestro caso `ventana`. En este ejemplo se usan las opciones `text` y `command`, la primera permite mostrar texto en el botón y la segunda permite conectar el botón con alguna función o método al ser presionado. Finalmente, se agrega el botón con `boton.place`; como se observa en el archivo [readme](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/README.md), es posible agregar el widget con los métodos `pack` o `grid` que están comentados en este ejemplo.
41+
42+
[Aquí](https://www.tutorialspoint.com/python3/tk_button.htm) para ver más opciones de Button.

widgets/button/mensajebutton.png

2.07 KB
Loading

widgets/button/ventanabutton.png

2.19 KB
Loading

widgets/canvas/arcocanvas.png

4.57 KB
Loading

widgets/canvas/canvas.md

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# Tkinter Canvas
2+
Permite agregar espacios rectangulares para dibujar líneas, polígonos, arcos, óvalos o mostrar imágenes.
3+
4+
## Ejemplo
5+
6+
```python
7+
# -*- coding: utf-8 -*-
8+
"""
9+
Ejemplo de ventana básico con canvas para dibujar
10+
11+
"""
12+
#Importamos las librerías necesarias
13+
import tkinter as tk
14+
15+
ventana = tk.Tk() #Crea la ventana principal
16+
ventana.geometry("500x500") #Tamaño de la ventana en pixeles
17+
18+
#Espacio para dibujar
19+
canvas = tk.Canvas(ventana,bd = 10,bg ="black")
20+
canvas.pack()
21+
22+
def accionArc():
23+
#Dibuja un arco
24+
canvas.create_arc(10,10,250,250, start = 0, extent = 150, fill = "blue")
25+
26+
def accionLine():
27+
#Dibuja una línea
28+
canvas.create_line(20,20,250,250,fill = "white")
29+
30+
#Botones para las acciones
31+
botonArc = tk.Button(ventana,text="Arco",command=accionArc)
32+
botonArc.pack()
33+
34+
botonLine = tk.Button(ventana,text="Línea",command=accionLine)
35+
botonLine.pack()
36+
37+
ventana.mainloop()
38+
```
39+
El resultado es el siguiente:
40+
41+
![ventana canvas](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/canvas/ventanacanvas.png)
42+
43+
Los botones (ver [Tkinter Button](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/button/button.md)) `Arco` y `Línea` están conectados respectivamente con las funciones `accionArc` y `accionLine`. Al presionar el botón `Arco` resulta:
44+
45+
![canvasarco](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/canvas/arcocanvas.png)
46+
47+
`canvas.create_arc` dibuja un arco, se debe indicar las coordenadas y es posible indicar el ángulo inicial, el ángulo final y el color del arco.
48+
49+
Luego se presiona el botón línea:
50+
51+
![canvaslinea](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/canvas/lineacanvas.png)
52+
53+
`canvas.create_line` dibuja una línea, se debe indicar las coordenas de los dos puntos y es posible indicar el color.
54+
55+
Después de crear la ventana principal, se crea el canvas con `tk.Canvas` y se indica el widget que lo va a contener `ventana`. Además, se usaron las opciones `bd` y `bg`, la primera permite crear un borde en el canvas y la segunda permite seleccionar el color del fondo.
56+
57+
[Aquí](https://www.tutorialspoint.com/python3/tk_canvas.htm) para ver más opciones de Canvas.

widgets/canvas/lineacanvas.png

5.13 KB
Loading

widgets/canvas/ventanacanvas.png

4.33 KB
Loading

widgets/checkbutton/checkbutton.md

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# Tkinter Checkbutton
2+
Permite mostrar opciones como un botón de activación, el botón puede ir acompañado de texto o una imagen. Se usa cuando se puede seleccionar una o varias opciones a diferencia de [Tkinter Radiobutton](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/radiobutton/radiobutton.md).
3+
4+
## Ejemplo
5+
6+
```python
7+
# -*- coding: utf-8 -*-
8+
"""
9+
Ejemplo de ventana básico con checkbutton
10+
11+
"""
12+
#Importamos las librerías necesarias
13+
import tkinter as tk
14+
15+
ventana = tk.Tk() #Crea la ventana principal
16+
17+
def accion():
18+
v1 = variable1.get()
19+
v2 = variable2.get()
20+
if v1 == True and v2 == True:
21+
print("1 y 2 activados")
22+
elif v1 == True and v2 == False:
23+
print("1 activado y 2 desactivado")
24+
elif v1 == False and v2 == True:
25+
print("1 desactivado y 2 activado")
26+
else:
27+
print("1 y 2 desactivados")
28+
29+
variable1 = tk.BooleanVar() #Variables que guardan el estado de los checkbutton
30+
variable2 = tk.BooleanVar()
31+
#Crea los checkbutton y los conecta con la función y la variable respectiva
32+
#La función se ejecuta cada que hay un cambio en el estado de los checkbutton
33+
C1 = tk.Checkbutton(ventana,variable=variable1,text="1",height=5,width=20,
34+
command=accion)
35+
C2 = tk.Checkbutton(ventana,variable=variable2,text="2",height=5,width=20,
36+
command=accion)
37+
C1.pack()
38+
C2.pack()
39+
40+
#Se crea un botón
41+
#Ejecuta la función sin cambiar el estado de los checkbuton
42+
boton = tk.Button(ventana, command=accion, text="Verificar")
43+
boton.pack()
44+
45+
ventana.mainloop()
46+
```
47+
El resultado es el siguiente:
48+
49+
![ventana checkbutton](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/checkbutton/ventanacheckbutton.png)
50+
51+
El botón está conectado a la función `accion` (Ver [Tkinter Button](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/button/button.md)), al igual que los checkbutton al cambiar de estado. La función muestra en la terminal el estado actual de los dos checkbutton como se observa a continuación:
52+
53+
![funcion checkbutton](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/checkbutton/funcioncheckbutton.png)
54+
55+
Después de crear la `tk.Tk` se define la función y los checkbutton. Para los checkbutton además de definir el widget que los va a contener, en este caso `ventana`, se definen las opciones `variable`, `text`, `command`, `height` y `width`. Las dos últimas definen el tamaño del chekbutton, `variable` guarda el estado actual del checkbutton `True` o `False`, `text` es el texto que acompaña el botón de activación y `command` permite llamar una función cuando cambia el estado del checkbutton.
56+
57+
[Aquí](https://www.tutorialspoint.com/python/tk_checkbutton.htm) para ver más opciones de Checkbutton.
1.26 KB
Loading
1.59 KB
Loading

widgets/colorchooser/colorchooser.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+

widgets/combobox/combobox.md

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# Tkinter Combobox
2+
Permite agregar un menú desplegable a la GUI. Solo es posible seleccionar una opción de las que se encuentren en el combobox, o si está permitido, es posible agregar otra opción diferente a las que ya están.
3+
4+
## Ejemplo
5+
6+
```python
7+
# -*- coding: utf-8 -*-
8+
"""
9+
Ejemplo de ventana básico con combobox
10+
11+
"""
12+
#Importamos las librerías necesarias
13+
import tkinter as tk
14+
from tkinter import ttk
15+
16+
ventana = tk.Tk() #Crea la ventana principal
17+
18+
#Insertar 20 elementos
19+
lista = []
20+
for i in range(20):
21+
lista.append("Elemento {}".format(i))
22+
23+
#Crear el widget combobox
24+
#State controla si se puede ingresar valores al combobox por teclado
25+
combobox = ttk.Combobox(ventana, values=lista, state="readonly")
26+
combobox.pack()
27+
28+
def mostrar():
29+
#Verifica si hay algún elemento seleccionado y lo muestra
30+
if combobox.get() != "":
31+
print(combobox.get())
32+
33+
#Se crea un botón y se conecta con la función
34+
boton = tk.Button(ventana,text="Mostrar selección",command=mostrar)
35+
boton.pack()
36+
37+
ventana.mainloop()
38+
```
39+
El resultado es el siguiente:
40+
41+
![ventana combobox](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/combobox/ventanacombobox.png)
42+
43+
El combobox permite seleccionar alguna de las opciones, el botón está conectado a la función `mostrar` (ver [Tkinter Button](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/button/button.md)) que al ser ejecutada muestra en la terminal el elemento que está seleccionado en el combobox así:
44+
45+
![funcion combobox](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/combobox/funcioncombobox.png)
46+
47+
En este ejemplo, después de crear la ventana principal `tk.Tk`, se crea la lista con los elementos que estarán en el menú. Luego se define el combobox, indicando el widget en el que estará con las opciones `values` y `state`; la primera permite ingresar la lista de opciones que mostrará el combobox y la última es para indicar si se permite o no ingresar más opciones de las que están en `values`.

widgets/combobox/funcioncombobox.png

676 Bytes
Loading

widgets/combobox/ventanacombobox.png

1.56 KB
Loading

widgets/entry/entry.md

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Tkinter Entry
2+
Es un widget que permite agregar una sola línea de texto al usuario.
3+
- Si quiere permitir agregar varias líneas de texto usar el widget [Text](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/text/text.md).
4+
- Si quiere mostrar pero no permitir editar varias líneas de texto usar el widget [Label](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/label/label.md) o [Message](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/message/message.md).
5+
6+
## Ejemplo
7+
8+
```python
9+
# -*- coding: utf-8 -*-
10+
"""
11+
Ejemplo de ventana básico con entry
12+
13+
"""
14+
#Importamos las librerías necesarias
15+
import tkinter as tk
16+
17+
ventana = tk.Tk() #Crea la ventana principal
18+
ventana.geometry("250x100")
19+
20+
variable1 = tk.StringVar() #Variable que guarda el texto del label
21+
variable1.set("Er54xsW") #Cambia el texto de la variable
22+
#Se crea el label y se conecta con variable1
23+
label = tk.Label(ventana,textvariable=variable1)
24+
label.pack()
25+
26+
variable = tk.StringVar() #Variable que guarda el texto del entry
27+
#Se crea el entry y se conecta con variable
28+
entrada = tk.Entry(ventana,textvariable=variable,bd = 5,width=20)
29+
entrada.pack()
30+
31+
def accion():
32+
#Comprueba texto del label y del entry
33+
if variable1.get() == variable.get():
34+
print("Correcto")
35+
else:
36+
print("Incorrecto")
37+
38+
#Crea el botón y lo conecta con la función
39+
boton = tk.Button(ventana,text="Verificar",command=accion)
40+
boton.pack()
41+
42+
ventana.mainloop()
43+
```
44+
El resultado es el siguiente:
45+
46+
![ventana entry](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/entry/ventanaentry.png)
47+
48+
El botón está conectado a la función `accion` (Ver [Tkinter Button](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/button/button.md)), la cual comprueba si el texto en el label (Ver [Tkinter Label](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/label/label.md)) es igual al texto en el entry, mostrando en la terminal "correcto" o "incorrecto".
49+
50+
![funcion entry](https://github.com/juan-suarezp/PythonTkinterTutorial/blob/master/widgets/entry/funcionentry.png)
51+
52+
Primero se crea la `tk.Tk`, luego se define el label, el entry, la función y el botón. Para el entry se usan las opciones `textvariable`, `bd` y `width`. `textvariable` es para indicar la variable que guarda el texto que contiene el entry, `bd` crea un borde en el widget y `width` define el ancho.
53+
54+
[Aquí](https://www.tutorialspoint.com/python3/tk_entry.htm) para ver más opciones de Entry.

widgets/entry/funcionentry.png

5.16 KB
Loading

widgets/entry/ventanaentry.png

1.88 KB
Loading

widgets/filedialog/filedialog.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+

0 commit comments

Comments
 (0)