2015-08-17 4 views
6

Ich versuche, ttk.Treeview zu verwenden, um eine sortierbare Tabelle zu erstellen (wie Does tkinter have a table widget? und https://www.daniweb.com/software-development/python/threads/350266/creating-table-in-python).So bearbeiten Sie den Stil einer Überschrift in Treeview (Python TTK)

Es ist einfach zu arbeiten, aber ich habe einige Probleme mit dem Styling. Der Standardstil für die Strukturansicht ist schwarzer Text auf weißem Hintergrund. In meinem Code verwende ich jedoch:

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

meine GUI zu formatieren. Dieser übergreifende Stil wirkt sich auch auf die Überschrift des Treeview-Widgets aus. Da der Hintergrund der Standardüberschrift weiß ist, kann ich den Text nicht sehen (es sei denn, ich fahre mit der Maus über die Überschrift, wodurch sie hellblau wird).

Normalerweise würde ich den Stil eines Widgets mit einem Tag überschreiben, um entweder den Hintergrund oder Vordergrund zu ändern, aber ich kann nicht für das Leben von mir herausfinden, wie man die Treeview-Header anpassen! ttk.Treeview (...) akzeptiert keine Tags und ttk.Style(). configure ("Treeview", ...) hat keine Wirkung. Nur die Treeview-Elemente scheinen Tags zu akzeptieren, wenn Sie widget.insert (...) verwenden.

Diese verwirrt mich, weil das übergeordnete ttk.Style(). Konfigurieren ("", ...) tut die Treeview Schriften beeinflussen, so sollte es möglich sein, einen Tag, sie anzuwenden.

Kann jemand den Stil einer Treeview-Überschrift ändern?

Unten ist ein minimales Arbeitsbeispiel. Beachten Sie, dass das Tag für Elemente, aber nicht für Überschriften funktioniert, dass der Treeview-Stil keine Auswirkungen hat und dass das "." Stil hat einen Effekt. Ich benutze Python 2.7 unter Windows 7, falls das einen Unterschied macht.

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() 

Antwort

6

das funktioniert, wo ich bin -

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

+1

Du bist ein Held! Vielen Dank :) –

1

Sie die Schrift in den Treeview Header verwendet verändern können die standardmäßige benannte Schrift 'TkHeadingFont' verwenden.

ZB:

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