如何在Treeview中编辑标题的样式(Python ttk)



我正在尝试使用ttk。树形视图使一个可排序的表(按tkinter有一个表部件吗?和https://www.daniweb.com/software-development/python/threads/350266/creating-table-in-python) .

让它工作很容易,但我有一些问题的样式。Treeview标题的默认样式是白色背景上的黑色文本,这很好。然而,在我的代码中,我使用:

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

来格式化我的GUI。这种总体样式也会影响Treeview小部件的标题。因为默认的标题背景是白色的,所以我看不到文本(除非我将鼠标移到标题上,它会变成浅蓝色)。

通常情况下,我会覆盖一个小部件的样式使用标签来改变背景或前景,但我不能为我的生活弄清楚如何调整Treeview标题!ttk.Treeview(…)不接受任何标签,ttk.Style()。configure("Treeview",…)不起作用。当使用widget.insert(…)时,只有Treeview项似乎接受标记。

这让我很困惑,因为ttk.Style().configure(".",…)确实影响了Treeview标题,所以应该可以对它们应用一个标签。

有人知道如何改变一个树视图标题的样式吗?

下面是一个最小工作示例。注意,标签对项目起作用,但对标题不起作用,Treeview样式没有作用,而"。"样式有作用。我在Windows 7上使用Python 2.7,以防有什么不同。

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

this works where I am -

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

您可以使用默认命名字体'TkHeadingFont'来更改Treeview标题中使用的字体。

,

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

最新更新