python - ttk style
Cómo editar el estilo de un encabezado en Treeview(Python ttk) (2)
Puede modificar la fuente utilizada en los encabezados Treeview utilizando la fuente predeterminada llamada ''TkHeadingFont''.
P.ej:
font.nametofont(''TkHeadingFont'').configure(size = 15)
Estoy tratando de usar ttk.Treeview para hacer una tabla ordenable (según Does tkinter tiene un widget de tabla? Y https://www.daniweb.com/software-development/python/threads/350266/creating-table-in- pitón ).
Hacerlo funcionar es fácil, pero estoy teniendo problemas con el estilo. El estilo predeterminado para el encabezado Treeview es el texto negro sobre un fondo blanco, lo cual 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 el título del widget Treeview. Como el fondo predeterminado del encabezado es blanco, no puedo ver el texto (a menos que pase el mouse sobre el encabezado, que se vuelve azul claro).
Normalmente, anulo el estilo de un widget usando una etiqueta para cambiar el fondo o el primer plano, pero no puedo, por la vida de mí, descubrir cómo ajustar los encabezados de TreeView. ttk.Treeview (...) no acepta ninguna etiqueta, y ttk.Style (). configure ("Treeview", ...) no tiene ningún efecto. Solo los elementos de TreeView parecen aceptar etiquetas cuando se usa widget.insert (...).
Esto me desconcierta, porque el ttk.Style (). Configure (".", ...) general afecta los encabezados TreeView, por lo que debería ser posible aplicarles una etiqueta.
¿Alguien sabe cómo alterar el estilo de un encabezado Treeview?
A continuación se muestra un ejemplo de trabajo mínimo. Tenga en cuenta que la etiqueta funciona para los elementos pero no para los títulos, que el estilo Treeview no tiene ningún efecto, y que el "." el estilo tiene un efecto. Estoy usando Python 2.7 en Windows 7 en caso de que eso marque la 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'') #<----