Как полностью изменить цвет фона в tkinter.ttk Treeview

Я пытался создать браузер каталогов для моего недавнего проекта, который я разрабатываю в python 3.4.4 с помощью tkinter. Я не хочу, чтобы фон был цветом по умолчанию, поэтому я изменил фон большинства виджетов. У меня не было никаких проблем, пока я не добрался до Treeview. Я не слишком хорошо разбираюсь в ttk.Style(), но мне все же удалось получить

ttk.Style().configure("Treeview", background="black",
                foreground="white")

работать, однако это меняет только фон области, включенной в виджет. Ошибка

Я проверил, не связана ли проблема с изменением размера, но, похоже, все в порядке. Я также искал похожие проблемы в Интернете, думая, что делаю это неправильно, и нашел две ссылки, указывающие на то, что у Брайана Окли была такая же проблема еще в 2007 году.

Брайан Окли Re: как получить ttk:: древовидное представление без рамки

как создать ttk::treeview без рамки?

По сути, вывод состоял в том, что это ошибка при запуске в Windows. Из-за этого у меня осталось 3 общих вопроса:

Я просто полностью упускаю что-то очевидное и неправильно понимаю эти сообщения (скрещивая пальцы здесь), и если да, то что я делаю неправильно? Или, если это действительно была ошибка, было ли какое-либо решение для нее с 2007 года? И, наконец, если не было никакого решения, есть ли у кого-нибудь найденный способ обойти проблему, независимо от того, насколько хакерское решение?


person zlmonroe    schedule 06.05.2017    source источник
comment
Вы пробовали style.configure("Treeview", fieldbackground="black")?   -  person j_4321    schedule 06.05.2017
comment
Я только что попробовал это сейчас, и это, кажется, не имеет никакого эффекта   -  person zlmonroe    schedule 07.05.2017
comment
Я думаю, что это связано с используемой вами темой ttk, она должна работать с темой clam (style.them_use("clam")).   -  person j_4321    schedule 07.05.2017
comment
Это было j_4321. Огромное спасибо! (Я был бы рад принять ваш ответ, если бы вы представили его как полноценный ответ вне комментариев. Спасибо также за вашу помощь, мистер Яхли.   -  person zlmonroe    schedule 07.05.2017


Ответы (2)


Чтобы сделать фон Treeview полностью черным, параметры background и fieldbackground стиля Treeview должны быть установлены в черный цвет.

Кроме того, не все темы ttk поддерживают параметр fieldbackground, как темы "xpnative" и "vista".

Код:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

style = ttk.Style(root)
# set ttk theme to "clam" which support the fieldbackground option
style.theme_use("clam")
style.configure("Treeview", background="black", 
                fieldbackground="black", foreground="white")

tree = ttk.Treeview(root)
tree.insert("", 0, "item", text="item")
tree.pack()

root.mainloop()
person j_4321    schedule 07.05.2017
comment
Проблема с clam заключается в том, что он плотно сжимает строки. Проблема с style в целом заключается в том, что это повлияло на все мое существующее древовидное представление, а не только на то, для которого я хотел установить цвет. Положительный побочный эффект: малонаселенное древовидное представление сжимало кадр, устраняя пустое пространство. - person WinEunuuchs2Unix; 03.05.2021
comment
@WinEunuuchs2Unix Стиль моллюска будет применяться ко всем виджетам ttk, но если вы не хотите, чтобы все ваши древовидные представления имели черный фон, вы можете настроить "black.Treeview" вместо "Treeview" и сделать tree.configure(style="black.Treeview") для нужного дерева с черным фоном. - person j_4321; 03.05.2021
comment
Работает как шарм. Очень ценится. - person WinEunuuchs2Unix; 04.05.2021

Вместо этого используйте этот код:

ttk.Style().configure("Treeview", background="black", 
foreground="white", fieldbackground="black")

Надеюсь, это поможет вам,

Яхли.

person Mr Yahli    schedule 06.05.2017
comment
Он не работает со всеми темами ttk, vista и xpnative, похоже, не поддерживают параметр fieldbackground. - person j_4321; 07.05.2017