Sobre el capítulo

En este capítulo te voy a mostrar cómo personalizar los cursores en Tkinter, los tipos disponibles que puedes utilizar y cómo aplicarlos en diferentes widgets para mejorar la apariencia y funcionalidad de tus aplicaciones.

Tabla de contenidos
Logo

    Aprende a utilizar todos los cursores de Tkinter

    Los cursores y el método config
    Los cursores y el método config

    Tkinter cuenta con una serie de cursores que podemos aplicar a una gran cantidad de widgets mediante el atributo cursor.

    Este atributo se puede utilizar con el objeto de la ventana (Tk()), para que tome efecto sobre el lienzo (la parte donde colocas los widgets), o sobre cada widget concreto.

    Si lo utilizas solo para la ventana, cada widget que contenga seguirá teniendo su valor de cursor por defecto; solo afectará al lienzo.

    El atributo cursor en la ventana principal

    Puedes modificar el cursor que se aplica por defecto en la ventana, configurándola con el método config() y el atributo cursor:

    # Importación de Tkinter
    import tkinter as tk
    
    # Creación y configuración de la ventana
    ventana = tk.Tk()
    ventana.title("Python: Interfaces gráficas")
    ventana.geometry("500x100")
    ventana.config(cursor="Hand2")
    
    # Entrada de texto
    entrada = tk.Entry(ventana)
    entrada.pack()
    
    # Bucle de la ventana
    ventana.mainloop()
    Cursor hand2 de Tkinter

    Valores de cursor por defecto

    Cada widget (incluida la ventana principal) cuenta con su valor de cursor por defecto. Si especificamos un valor de cursor, el valor por defecto será reemplazado.

    Puedes consultar en el código los valores por defecto de cada widget.

    Si estás en Visual Studio Code, escribe el siguiente código (puede que en otros programas de desarrollo también funcione):

    import tkinter as tk
    
    tk.Button(cursor=)
    tk.Entry(cursor=)
    tk.Label(cursor=)

    No ejecutes este código o te dará error; tan solo tienes que pasar el cursor por el atributo cursor de uno de los widgets y pulsar el atajo CTRL + CLIC IZQ. Esto te llevará a la zona donde está declarado el código interno del widget y verás los siguientes valores (tienes que ir pulsando en cada atributo para ver el valor de cada widget):

    tk.Button(cursor=) -> cursor: _Cursor = ""
    tk.Entry(cursor=) -> cursor: _Cursor = "xterm"
    tk.Label(cursor=) -> cursor: _Cursor = ""
    Cursor de flecha Cursor por defecto
    Cursor de texto Cursor de texto

    Las cadenas de caracteres vacías que tienen los widgets Label() y Button(), indican que se va a utilizar el cursor por defecto del sistema operativo.

    En cambio, el widget Entry() tiene un valor por defecto de "xterm". Este es el valor designado al cursor de tipo texto, el típico que encontraremos en cualquier procesador de texto.

    Posibles valores de cursor

    Para probar los siguientes valores para el atributo cursor, puedes empezar con este código:

    import tkinter as tk
    
    ventana = tk.Tk()
    ventana.title("Python: Interfaces gráficas")
    ventana.geometry("500x100")
    
    ventana.config(background="black",
                   cursor="")
    
    ventana.mainloop()

    Tan solo tendrás que cambiar el valor de cursor, por los que verás a continuación. Con el atributo cursor tenemos muchas de posibilidades.

    Si pasas el cursor sobre el lienzo negro, podrás ver los cursores que vayas especificando para la ventana.

    Aquí tienes un ejemplo:

    ventana.config(background="black",
                    cursor="trek")
    Cursor de Star Trek en Tkinter

    A continuación, tienes el listado completo de cursores de Tkinter para que tengas una referencia a mano:

    arrow
    boat
    based_arrow_down
    based_arrow_up
    bogosity
    bottom_left_corner
    bottom_right_corner
    bottom_side
    bottom_tee
    box_spiral
    center_ptr
    circle
    clock
    coffee_mug
    cross
    cross_reverse
    crosshair
    diamond_cross
    dot
    dotbox
    double_arrow
    draft_large
    draft_small
    draped_box
    exchange
    fleur
    gobbler
    gumby
    hand1
    hand2
    heart
    icon
    iron_cross
    left_ptr
    left_side
    left_tee
    leftbutton
    ll_angle
    lr_angle
    man
    middlebutton
    mouse
    pencil
    pirate
    plus
    question_arrow
    right_ptr
    right_side
    right_tee
    rightbutton
    rtl_logo
    sailboat
    sb_down_arrow
    sb_h_double_arrow
    sb_left_arrow
    sb_right_arrow
    sb_up_arrow
    sb_v_double_arrow
    shuttle
    sizing
    spider
    spraycan
    star
    target
    tcross
    top_left_arrow
    top_left_corner
    top_right_corner
    top_side
    top_tee
    trek
    ul_angle
    umbrella
    ur_angle
    xterm
    X_cursor
    watch

    Espacio publicitario




    Espacio publicitario




    Espacio publicitario