Cómo editar el estilo de un encabezado en vista de árbol (Python ttk)

Estoy tratando de usar ttk.Treeview para hacer una tabla clasificable ( ¿de acuerdo con tkinter tiene un widget de tabla? python ).

Hacer que funcione es fácil, pero tengo algunos problemas con el estilo. El estilo predeterminado para el encabezado Treeview es texto negro sobre un fondo blanco, que está bien. Sin embargo, en mi código estoy usando:

ttk.Style().configure(".", font=('Helvetica', 8), foreground="white") 

para formatear mi GUI. Este estilo general también afecta al encabezado del widget Treeview. Debido a que el fondo del encabezado predeterminado es blanco, no puedo ver el texto (a menos que pase el mouse sobre el encabezado, que se vuelve azul claro).

Normalmente, anularía el estilo de un widget utilizando una etiqueta para cambiar el fondo o el primer plano, ¡pero no puedo, por mi vida, descubrir cómo ajustar los encabezados de vista de árbol! ttk.Treeview (…) no acepta ninguna etiqueta, y ttk.Style (). configure (“Treeview”, …) no tiene ningún efecto. Solo los elementos de la vista de árbol parecen aceptar tags cuando se utiliza widget.insert (…).

Esto me desconcierta, porque el estilo ttk.Style (). Configure (“.”, …) general afecta a los encabezados de vista de árbol, por lo que debería ser posible aplicarles una etiqueta.

¿Alguien sabe cómo modificar el estilo de un encabezado Treeview?

A continuación se muestra un ejemplo de trabajo mínimo. Tenga en cuenta que la etiqueta funciona con los elementos pero no con los encabezados, que el estilo Treeview no tiene efecto y que el “.” el estilo tiene un efecto Estoy usando Python 2.7 en Windows 7 en caso de que eso haga una diferencia.

  from Tkinter import * import ttk header = ['car', 'repair'] data = [ ('Hyundai', 'brakes') , ('Honda', 'light') , ('Lexus', 'battery') , ('Benz', 'wiper') , ('Ford', 'tire')] root = Tk() frame = ttk.Frame(root) frame.pack() table = ttk.Treeview(frame, columns=header, show="headings") table.pack() ## table.tag_configure('items', foreground='blue') ## ttk.Style().configure("Treeview", background='red', foreground='yellow') ## ttk.Style().configure(".", font=('Helvetica', 8), foreground="white") for col in header: table.heading(col, text=col.title(), command=lambda c=col: sortby(table, c, 0)) for item in data: table.insert('', 'end', values=item, tags=('items',)) def sortby(tree, col, descending): """sort tree contents when a column header is clicked on""" # grab values to sort data = [(tree.set(child, col), child) \ for child in tree.get_children('')] # if the data to be sorted is numeric change to float #data = change_numeric(data) # now sort the data in place data.sort(reverse=descending) for ix, item in enumerate(data): tree.move(item[1], '', ix) # switch the heading so it will sort in the opposite direction tree.heading(col, command=lambda col=col: sortby(tree, col, \ int(not descending))) root.mainloop() 

esto funciona donde estoy

 style = ttk.Style() style.configure(".", font=('Helvetica', 8), foreground="white") style.configure("Treeview", foreground='red') style.configure("Treeview.Heading", foreground='green') #<---- 

http://www.tkdocs.com/tutorial/styles.html

Puede alterar la fuente utilizada en las cabeceras Treeview utilizando la fuente con nombre predeterminada ‘TkHeadingFont’.

P.ej:

 font.nametofont('TkHeadingFont').configure(size = 15)