Buscar..


Introducción

Lanzado en Tkinter es la biblioteca GUI (interfaz gráfica de usuario) más popular de Python. Este tema explica el uso adecuado de esta biblioteca y sus características.

Observaciones

La capitalización del módulo tkinter es diferente entre Python 2 y 3. Para Python 2 use lo siguiente:

from Tkinter import *  # Capitalized

Para Python 3 usa lo siguiente:

from tkinter import *  # Lowercase

Para el código que funciona con Python 2 y 3, puede hacer

try:
    from Tkinter import *
except ImportError:
    from tkinter import *

o

from sys import version_info
if version_info.major == 2:
    from Tkinter import *
elif version_info.major == 3:
    from tkinter import *

Ver la Documentación tkinter para más detalles.

Una aplicación tkinter mínima

tkinter es un kit de herramientas de GUI que proporciona un envoltorio alrededor de la biblioteca de GUI de Tk / Tcl y se incluye con Python. El siguiente código crea una nueva ventana usando tkinter y coloca algún texto en el cuerpo de la ventana.

Nota: En Python 2, el uso de mayúsculas puede ser ligeramente diferente, consulte la sección de Comentarios a continuación.

import tkinter as tk

# GUI window is a subclass of the basic tkinter Frame object
class HelloWorldFrame(tk.Frame):
    def __init__(self, master):
        # Call superclass constructor
        tk.Frame.__init__(self, master)
        # Place frame into main window
        self.grid()
        # Create text box with "Hello World" text
        hello = tk.Label(self, text="Hello World! This label can hold strings!")
        # Place text box into frame
        hello.grid(row=0, column=0)

# Spawn window
if __name__ == "__main__":
    # Create main window object
    root = tk.Tk()
    # Set title of window
    root.title("Hello World!")
    # Instantiate HelloWorldFrame object
    hello_frame = HelloWorldFrame(root)
    # Start GUI
    hello_frame.mainloop()

Gerentes de geometría

Tkinter tiene tres mecanismos para la gestión de la geometría: place , pack y grid .

El place gestor utiliza coordenadas absolutas de píxeles.

El gestor de pack coloca los widgets en uno de los 4 lados. Los nuevos widgets se colocan al lado de los widgets existentes.

El administrador de grid coloca los widgets en una cuadrícula similar a una hoja de cálculo de cambio de tamaño dinámico.

Lugar

Los argumentos de palabras clave más comunes para widget.place son los siguientes:

  • x , la coordenada x absoluta del widget
  • y , la coordenada y absoluta del widget
  • height , la altura absoluta del widget
  • width , el ancho absoluto del widget

Un ejemplo de código usando place :

class PlaceExample(Frame):
    def __init__(self,master):
        Frame.__init__(self,master)
        self.grid()
        top_text=Label(master,text="This is on top at the origin")
        #top_text.pack()
        top_text.place(x=0,y=0,height=50,width=200)
        bottom_right_text=Label(master,text="This is at position 200,400")
        #top_text.pack()
        bottom_right_text.place(x=200,y=400,height=50,width=200)
# Spawn Window
if __name__=="__main__":
    root=Tk()
    place_frame=PlaceExample(root)
    place_frame.mainloop()

Paquete

widget.pack puede tomar los siguientes argumentos de palabras clave:

  • expand , ya sea para llenar o no el espacio dejado por el padre
  • fill , si desea expandir para llenar todo el espacio (NINGUNO (predeterminado), X, Y o AMBOS)
  • side , el lado contra el que empacar (TOP (predeterminado), ABAJO, IZQUIERDO o DERECHO)

Cuadrícula

Los argumentos de palabras clave más utilizados de widget.grid son los siguientes:

  • row , la fila del widget (por defecto el más pequeño desocupado)
  • rowspan , el número de columnas que un widget abarca (valor predeterminado 1)
  • column , la columna del widget (por defecto 0)
  • columnspan , el número de columnas que abarca un widget (por defecto 1)
  • sticky , dónde colocar el widget si la celda de la cuadrícula es más grande que él (combinación de N, NE, E, SE, S, SW, W, NW)

Las filas y columnas están indexadas a cero. Las filas aumentan bajando y las columnas aumentan yendo a la derecha.

Un ejemplo de código usando grid :

from tkinter import *

class GridExample(Frame):
    def __init__(self,master):
        Frame.__init__(self,master)
        self.grid()
        top_text=Label(self,text="This text appears on top left")
        top_text.grid() # Default position 0, 0
        bottom_text=Label(self,text="This text appears on bottom left")
        bottom_text.grid() # Default position 1, 0
        right_text=Label(self,text="This text appears on the right and spans both rows",
                         wraplength=100)
        # Position is 0,1
        # Rowspan means actual position is [0-1],1
        right_text.grid(row=0,column=1,rowspan=2)

# Spawn Window
if __name__=="__main__":
    root=Tk()
    grid_frame=GridExample(root)
    grid_frame.mainloop()

¡Nunca mezcle el pack y la grid dentro del mismo marco! ¡Al hacerlo se producirá un interbloqueo en la aplicación!



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow