es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo mostrar el árbol de visualización.

Aprendí a usar Treeview e intenté hacer este estilo de código solo para probar una perspectiva diferente sobre cómo abrir Treeview. Actualmente he intentado hacerlo de esta forma y Treeview no aparece en el nivel superior. Actualmente esto es lo que hice:

from tkinter import ttk
import tkinter as tk

class setup(tk.Tk):
def init(self):
tk.Tk.init(self)
self.frame = None
self.switch_frame(mainpage)

def switch_frame(self, frame_class):
“””Destruye el marco actual y lo reemplaza por uno nuevo.”””
new_frame = frame_class(self)
if self._frame is not None:
self._frame.destroy()
self._frame = new_frame
self._frame.place(x=0, y=0, relwidth=1, relheight=1)

class mainpage(tk.Frame):
def init(self, master):
tk.Frame.init(self,master)
master.geometry(“400×400″)
treeview = tk.Button(self, text=”abrir Treeview”, command=lambda: display_treeview()).pack()

class my_treeview(tk.Toplevel):
def init(self, tree):
tk.Toplevel.init(self)
self.tree = tree
tree = ttk.Treeview()
self.title(“Esta es la ventana de nivel superior para Treeview”)
self.geometry(“600×500”)

class display_treeview(ttk.Treeview):
def init(self):
ttk.Treeview.init(self)
self.insert(“”, “0”, “item1″, text=”anchura de relleno”)
self.insert(“”, “0”, “item2″, text=”anchura de relleno”)
my_treeview(display_treeview)

if name == “main”:
app = setup()
app.mainloop()

El último ejemplo funcional que hice fue este:

from tkinter import ttk
import tkinter as tk

def my_treeview():
mt = tk.Toplevel()
mt.geometry(“1000×580”)

tree = ttk.Treeview(mt)
tree.insert(“”, “0”, “item1″, text=”anchura de relleno”)
tree.insert(“”, “1”, “item2″, text=”altura de relleno”)

tree.pack(fill=”both”)

root = tk.Tk()
root.geometry(“400×400″)

treeview = tk.Button(root, text=”abrir Treeview”, command=my_treeview).pack()

root.mainloop()

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El código que proporcionaste no está funcionando como se esperaba porque hay algunos errores en la implementación.

    En primer lugar, en la línea 27, el método my_treeview() no se llama cuando se hace clic en el botón. En su lugar, proporcionas display_treeview() como comando. Esto no funcionará porque display_treeview() es una clase y no una función.

    En segundo lugar, en la línea 31, estás creando una nueva instancia de ttk.Treeview() en el método my_treeview(), pero no la estás utilizando. En su lugar, deberías pasar el objeto treeview existente como argumento a la función my_treeview().

    Finalmente, en lugar de utilizar el método self._frame.place() para colocar el marco mainpage, debes utilizar self._frame.pack() o self._frame.grid() para añadir y posicionar de forma sencilla los widgets.

    Aquí está el código actualizado que debería funcionar como se espera:

    from tkinter import ttk
    import tkinter as tk
    
    
    class Setup(tk.Tk):
        def __init__(self):
            tk.Tk.__init__(self)
            self._frame = None
            self.switch_frame(MainPage)
    
        def switch_frame(self, frame_class):
            """Destruye el marco actual y lo reemplaza por uno nuevo."""
            new_frame = frame_class(self)
            if self._frame is not None:
                self._frame.destroy()
            self._frame = new_frame
            self._frame.pack(expand=True, fill='both')
    
    class MainPage(tk.Frame):
        def __init__(self, master):
            tk.Frame.__init__(self, master)
            master.geometry("400x400")
            tree_button = tk.Button(self, text="Abrir Treeview", command=self.display_treeview)
            tree_button.pack()
    
        def display_treeview(self):
            my_treeview(ttk.Treeview())
    
    class my_treeview(tk.Toplevel):
        def __init__(self, tree):
            tk.Toplevel.__init__(self)
            self.tree = tree
            self.title("Esta es una ventana superior para treeview")
            self.geometry("600x500")
            self.tree.insert("", "0", "item1", text="Llenar ancho")
            self.tree.insert("", "1", "item2", text="Llenar altura")
            self.tree.pack(fill='both', expand=True)
    
    
    if __name__ == "__main__":
        app = Setup()
        app.mainloop()
    

    Ten en cuenta que también cambié los nombres de las clases para seguir las convenciones de nomenclatura de Python (usando camelCase en lugar de minúsculas). El botón treeview ahora se coloca utilizando el método pack() en la clase MainPage. Además, el método my_treeview ahora recibe el objeto ttk.Treeview() como argumento y lo llena de datos dentro del método.

Comments are closed.