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()
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, proporcionasdisplay_treeview()
como comando. Esto no funcionará porquedisplay_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étodomy_treeview()
, pero no la estás utilizando. En su lugar, deberías pasar el objetotreeview
existente como argumento a la funciónmy_treeview()
.Finalmente, en lugar de utilizar el método
self._frame.place()
para colocar el marcomainpage
, debes utilizarself._frame.pack()
oself._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:
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étodopack()
en la claseMainPage
. Además, el métodomy_treeview
ahora recibe el objetottk.Treeview()
como argumento y lo llena de datos dentro del método.