Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Tkinter treeview "heading" columnas interactivas
#1
Buenas:

Tengo una duda con respecto a los "títulos" de las columnas de un Treeview,.

Actualmente tengo un Treeview con columnas asociado a una base de datos postgresql con el módulo psycopg2.

Todo funciona perfectamente pero he comprobado que cuando pasas el ratón por el encabezado de las columnas estás resaltan como si adquirieran el focus.

En mi trabajo, tenemos una aplicación muy parecida(No está hecha con python) en dónde si "clickeas" sobre el encabezado de las columnas estás se ordenan en función de la columna selecionada.

Me gustaría saber si esto es posible con Tkinter.  No tengo muy claro como hacerlo si con event.widget() o más bien sería con un bind() del treeview o cómo hacerlo.

¿Cómo le debería indicar al bind() que tiene que ordenar los datos mostrados según la columna que tiene el focus?. (Bueno sí mediante una función claro pero no sé que poner en esa función).

P.D. Lo de ordenar los datos de la base de datos no hay problema eso sí sé como hacerlo mediante una función. Lo que no sé es acceder a la columna que tiene el focus en el treeview. No sé si me expreso bien.

Muchas Gracias.
Responder
#2
Hola, ¿cómo estás?

Con la misma función heading() usada para configurar el texto de la columna, podés usar el argumento command para pasar una función que sea invocada cuando el usuario presiona sobre la cabecera:

  1. import tkinter as tk
  2. from tkinter import ttk
  3.  
  4. def columna_archivo():
  5. print("Columna 'Archivo' presionada.")
  6.  
  7. root = tk.Tk()
  8. treeview = ttk.Treeview(columns=("size", "lastmod"))
  9. treeview.heading("#0", text="Archivo", command=columna_archivo)
  10. treeview.heading("size", text="Tamaño")
  11. treeview.heading("lastmod", text="Última modificación")
  12. treeview.pack()
  13. root.mainloop()


Saludos
Responder
#3
(21-02-2022, 05:54 PM)Francisco escribió: Hola, ¿cómo estás?

Con la misma función heading() usada para configurar el texto de la columna, podés usar el argumento command para pasar una función que sea invocada cuando el usuario presiona sobre la cabecera:

  1. import tkinter as tk
  2. from tkinter import ttk
  3.  
  4. def columna_archivo():
  5.     print("Columna 'Archivo' presionada.")
  6.  
  7. root = tk.Tk()
  8. treeview = ttk.Treeview(columns=("size", "lastmod"))
  9. treeview.heading("#0", text="Archivo", command=columna_archivo)
  10. treeview.heading("size", text="Tamaño")
  11. treeview.heading("lastmod", text="Última modificación")
  12. treeview.pack()
  13. root.mainloop()


Saludos

¡Muchas Gracias Francisco!.

P.D. Por error puse este tema en general y quizá debería estar en aplicaciones de escritorio. No sé si se puede mover allí.

Gracias de nuevo.
Responder
#4
¡Lo movemos! De nada. Saludos Smile
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)