Menú de clic derecho usando Tkinter

Python 3.x viene incluido con el módulo Tkinter que es útil para crear aplicaciones basadas en GUI. De todos los demás marcos compatibles con Python, Tkinter es el más simple y rápido. Tkinter ofrece una gran cantidad de widgets que se pueden usar para crear aplicaciones GUI junto con el bucle de eventos principal que continúa ejecutándose en segundo plano hasta que la aplicación se cierra manualmente.

Nota: Para obtener más información, consulte Python GUI – tkinter

Tkinter proporciona un mecanismo para tratar eventos. El evento es cualquier acción que debe ser manejada por una pieza de código dentro del programa. Los eventos incluyen clics del mouse, movimientos del mouse o una pulsación de tecla de un usuario. Tkinter usa secuencias de eventos que permiten a los usuarios vincular eventos a controladores para cada widget.
Sintaxis:

widget.bind(event, handler)

El widget de Tkinter es capaz de capturar una variedad de eventos como Button, ButtonRelease, Motion, Double-Button, FocusIn, FocusOut, Key y muchos más. El código de este artículo básicamente se ocupa del manejo de eventos en el que se muestra un menú emergente con varias opciones tan pronto como se encuentra el botón derecho en el widget principal. El widget de menú de Tkinter se utiliza para implementar menús emergentes, desplegables y de nivel superior.

  1. Importar módulo tkinter
    import tkinter
  2. Importar submódulo tkinter
    from tkinter import *
  3. Crear el widget principal
    root = Tk()

    Sintaxis: Tk(screenName=Ninguno, baseName=Ninguno, className=’Tk’, useTk=1)
    Parámetro: En este ejemplo, la clase Tk se instancia sin argumentos.
    Explicación:
    el método Tk() crea un widget principal en blanco con botones para cerrar, maximizar y minimizar en la parte superior.

  4. Creación de la etiqueta a mostrar
    L = Label(root, text="Right-click to display menu", width=40, height=20)

    Sintaxis: Etiqueta(maestro, **opciones)
    Parámetro:

    • maestro: la ventana principal (raíz) actúa como el maestro.
    • opciones: el método Label() admite las siguientes opciones: texto, ancla, bg, mapa de bits, bd, cursor, fuente, fg, alto, ancho, imagen, justificar, relieve, padx, pady, textvariable, subrayado y wraplength. Aquí se utiliza la opción de texto para mostrar texto informativo al usuario y el ancho y el alto especifican la posición del widget de etiqueta en la ventana principal.

    Explicación:
    el widget de etiqueta se usa para mostrar texto o imágenes correspondientes a un widget. El texto que se muestra en la pantalla se puede formatear aún más usando las otras opciones disponibles en el widget de etiqueta.

  5. Posicionamiento de la etiqueta
    L.pack()

    Sintaxis: pack(opciones)
    Parámetro:

    • opciones: las opciones admitidas por el método pack() son expandir, rellenar y lateral, que se utilizan para colocar el widget en la ventana principal. Sin embargo, el método pack() se demanda sin ninguna opción aquí.

    Explicación:
    El método pack() se usa para colocar el widget secundario en el widget principal.

  6. Creando el menú
    m = Menu(root, tearoff=0)

    Sintaxis: Menú (maestro, opciones)
    Parámetro:

    • master: root es el widget principal o maestro.
    • opciones: las opciones compatibles con el widget de menú son título, corte, color de selección, fuente, fg, comando posterior, relieve, imagen, fondo, bd, cursor, frente activo, ancho de borde activo y fondo activo. Aquí se utiliza la opción ‘cortar’.

    Explicación:
    el corte se usa para separar menús de la ventana principal creando menús flotantes. Si tearoff=1, crea un menú con líneas de puntos en la parte superior que, cuando se hace clic en el menú, arranca la ventana principal y se vuelve flotante. Para restringir el menú en la ventana principal tearoff=0 aquí.

  7. Adición de opciones al menú.
    m.add_command(label="Cut")
    m.add_command(label="Copy")
    m.add_command(label="Paste")
    m.add_command(label="Reload")
    m.add_separator()
    m.add_command(label="Rename")

    Sintaxis: add_command(opciones)
    Parámetro:

    • opciones: Las opciones disponibles son etiqueta, comando, subrayado y acelerador. La opción de etiqueta se usa aquí para especificar los nombres de los elementos del menú.

    Explicación:
    el método add_command() agrega elementos de menú al menú. El add_separator() crea una línea delgada entre los elementos del menú.

  8. def do_popup(event):
        try:
            m.tk_popup(event.x_root, event.y_root)
        finally:
            m.grab_release()
    

    Sintaxis: tk_popup(x_root, y_root)
    Parámetro: Este procedimiento publica un menú en una posición dada en la pantalla, x_root e y_root es la posición actual del mouse en relación con la esquina superior izquierda de la pantalla.
    Explicación:
    Este método es el controlador de eventos. Cuando ocurre el evento (clic con el botón derecho), se llama al método y aparece el menú en el widget principal en la posición donde ocurre el evento. El bloque finalmente asegura que el método grab_release() libere el evento grab.

  9. L.bind("<Button-3>", do_popup)

    Sintaxis: bind(evento, manejador)
    Parámetro:

    • evento: aquí, el clic derecho es el evento y se indica con <Botón-3>.
    • controlador: el controlador es una pieza de código que realiza alguna tarea particular cuando se activa el evento.

    Explicación:
    Se presiona el botón derecho del mouse con el puntero del mouse sobre el widget y esto activa un evento que es manejado por el controlador de eventos (función do_popup()). La función do_popup() muestra el menú.

  10. Ejecutar la aplicación
    mainloop()

    Sintaxis: mainloop()
    Parámetro: No acepta argumentos.
    Explicación:
    Actúa como un bucle infinito que mantiene la aplicación en ejecución hasta que la ventana principal se cierra manualmente.

import tkinter
from tkinter import *
  
root = Tk()
  
L = Label(root, text ="Right-click to display menu",
          width = 40, height = 20)
L.pack()
  
m = Menu(root, tearoff = 0)
m.add_command(label ="Cut")
m.add_command(label ="Copy")
m.add_command(label ="Paste")
m.add_command(label ="Reload")
m.add_separator()
m.add_command(label ="Rename")
  
def do_popup(event):
    try:
        m.tk_popup(event.x_root, event.y_root)
    finally:
        m.grab_release()
  
L.bind("<Button-3>", do_popup)
  
mainloop()

Producción
python-tkinter-right-click-menu

Explicación
Cuando se hace un clic derecho en la ventana principal, aparece el menú emergente y muestra una lista de opciones.

Publicación traducida automáticamente

Artículo escrito por Shreyasi_Chakraborty y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *