Publicidad

Diferencia entre menú "flotante" y menú. "fijo" en tkinter-

Publicado por Daniel1952, 15 Agosto de 2022, 11:42

Tema anterior - Siguiente tema

0 Usuarios y 1 Visitante están viendo este tema.

Daniel1952

Hola muy buen día para todos.-
No me gustan muchos las presentaciones porque soy un autodidacta muy activo
y si no les molesta soy de consultar mucho en los foros y me conocerán muy rápido.-
Si aclaro que tengo 70 años así que de ser posible un poco de paciencia.-
Dicho esto mi primer consulta, ¿puedo con este mismo código hacer los 2 menús?
con algunos cambios, claro.-

import tkinter as tk
from tkinter import ttk


def menuCompleto(editorTexto):

    def display_popup(event):
        menu.post(event.x_root, event.y_root)

    def popup_select():
        editorTexto.tag_add("sel", "1.0", "end")


    def popup_copy():
        editorTexto.event_generate("<<Copy>>")

    def popup_cut():
        editorTexto.event_generate("<<Cut>>")

    def popup_paste():
        editorTexto.event_generate("<<Paste>>")

    def popup_deshacer():
        editorTexto.event_generate("<<Undo>>")

    def popup_rehacer():
        editorTexto.event_generate("<<Redo>>")



    menu = tk.Menu(editorTexto, tearoff=False)
    menu.add_command(label="Deshacer", accelerator="Ctrl+Z", command=popup_deshacer)
    menu.add_command(label="Rehacer", accelerator="Ctrl+Y",command=popup_rehacer)
    menu.add_separator()
    menu.add_command(label="Cortar", accelerator="Ctrl+X", command=popup_cut)
    menu.add_command(label="Copiar", accelerator="Ctrl+C", command=popup_copy)
    menu.add_command(label="Pegar", accelerator="Ctrl+V",  command=popup_paste)
    menu.add_command(label="Seleccionar todo", accelerator="Ctrl+A", command=popup_select)

    editorTexto.bind("<Button-3>", display_popup)

Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Rock Lee

Bueno como suelo decir con calma y tiempo se puede entender mejor, los apuros son malos. Ahora respecto a tu duda si puedes hacer 2 (o mas menus, con hasta sub-menus) pero tenes definirlo con otra función, yo hasta 5 pude luego ya daba error. No estoy seguro que estas haciendo pero encapsulando e importando el menú ahorras conflictos... y por cierto bienvenido :)!


Saludos Familia!

Daniel1952

Hola, ¿ cómo estás?, gracias por tu tiempo.
Debo reconocer que no me explique lo suficiente para que se entienda,
lo que quería es reutilizar el código que puse para crear en el mismo
módulo los 2 menús y utilizar las mismas funciones para ambos.-
Luego de postear me di cuenta de que no era tan difícil y lo estoy intentando.-

Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Rock Lee

Si podes usarlo pero tenes cambiar la llamada sino seria duplicarlo y dar error en algunas ocaciones, si podes separar las llamadas del manu los modulos pueden ser usados por ambos. Espero lo logres :)!


Saludos Familia!

Daniel1952

Hola gente, ¿ cómo están?.-
Bueno, tu deseo se cumplió, ya lo tengo en funcionamiento,
lo subo para que (si lo deseas) me digas cuál es el error que sugerías.-

#-------------------------------------------------------------------------------
# Name:        menues
# Purpose:
#
# Author:      Daniel
#
# Created:     15/08/2022
# Copyright:   (c) Daniel 2022
# Licence:     <your licence>
#-------------------------------------------------------------------------------
import tkinter as tk
from functools import partial
import Buscador

def display_popup(menu, event):
    menu.post(event.x_root, event.y_root)

def popup_select(editorTexto):
    editorTexto.tag_add("sel", "1.0", "end")

def popup_copy(editorTexto):
    editorTexto.event_generate("<<Copy>>")

def popup_cut(editorTexto):
    editorTexto.event_generate("<<Cut>>")

def popup_paste(editorTexto):
    editorTexto.event_generate("<<Paste>>")

def popup_deshacer(editorTexto):
    editorTexto.event_generate("<<Undo>>")

def popup_rehacer(editorTexto):
    editorTexto.event_generate("<<Redo>>")


def menuFlotante(editorTexto, principal):

    menu = tk.Menu(editorTexto, tearoff=False)
    menu.add_command(label="Deshacer", accelerator="Ctrl+Z", command=partial(popup_deshacer, editorTexto))
    menu.add_command(label="Rehacer", accelerator="Ctrl+Y",command=partial(popup_rehacer, editorTexto))
    menu.add_separator()
    menu.add_command(label="Cortar", accelerator="Ctrl+X", command=partial(popup_cut, editorTexto))
    menu.add_command(label="Copiar", accelerator="Ctrl+C", command=partial(popup_copy, editorTexto))
    menu.add_command(label="Pegar", accelerator="Ctrl+V",  command=partial(popup_paste, editorTexto))
    menu.add_command(label="Seleccionar todo", accelerator="Ctrl+A", command=partial(popup_select, editorTexto))
    menu.add_separator()
    menu.add_command(label="Buscar", accelerator="Ctrl+B", command=partial(Buscador.ventanaBuscar,
          editorTexto, principal, "none"))

    editorTexto.bind("<Button-3>", partial(display_popup, menu))


def menuFijo(editorTexto, principal):
    menubar = tk.Menu(principal)
    principal.config(menu=menubar)

    editMenu = tk.Menu(menubar, tearoff=0)
    editMenu.add_command(label="Deshacer", accelerator="Ctrl+Z", command=partial(popup_deshacer, editorTexto))
    editMenu.add_command(label="Rehacer", accelerator="Ctrl+Y",command=partial(popup_rehacer, editorTexto))
    editMenu.add_separator()
    editMenu.add_command(label="Cortar", accelerator="Ctrl+X", command=partial(popup_cut, editorTexto))
    editMenu.add_command(label="Copiar", accelerator="Ctrl+C", command=partial(popup_copy, editorTexto))
    editMenu.add_command(label="Pegar", accelerator="Ctrl+V",  command=partial(popup_paste, editorTexto))
    editMenu.add_command(label="Seleccionar todo", accelerator="Ctrl+A", command=partial(popup_select, editorTexto))
    editMenu.add_separator()
    editMenu.add_command(label="Buscar", accelerator="Ctrl+B", command=partial(Buscador.ventanaBuscar,
          editorTexto, principal, "none"))


    fileMenu = tk.Menu(menubar, tearoff=0)
    fileMenu.add_command(label="Nuevo")
    fileMenu.add_command(label="Abrir")
    fileMenu.add_command(label="Guardar")


    menubar.add_cascade(label="Archivo", menu=fileMenu)
    menubar.add_cascade(label="Editar", menu=editMenu)

Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Rock Lee

Genial entonces lo marco como resuelto al tema, a si para quien busca es mas facil encontrar. No nada que comentar siempre veo el tema identacion mal y toman malas mañas, aunque veo esta limpio y claro muy buena redacion!


Saludos Familia!