Foros Python

Versión completa: Tkinter treeview "heading" columnas interactivas
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
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.
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:

Código:
import tkinter as tk
from tkinter import ttk

def columna_archivo():
    print("Columna 'Archivo' presionada.")

root = tk.Tk()
treeview = ttk.Treeview(columns=("size", "lastmod"))
treeview.heading("#0", text="Archivo", command=columna_archivo)
treeview.heading("size", text="Tamaño")
treeview.heading("lastmod", text="Última modificación")
treeview.pack()
root.mainloop()

Saludos
(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:

Código:
import tkinter as tk
from tkinter import ttk

def columna_archivo():
    print("Columna 'Archivo' presionada.")

root = tk.Tk()
treeview = ttk.Treeview(columns=("size", "lastmod"))
treeview.heading("#0", text="Archivo", command=columna_archivo)
treeview.heading("size", text="Tamaño")
treeview.heading("lastmod", text="Última modificación")
treeview.pack()
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.
¡Lo movemos! De nada. Saludos Smile