Недавно я пытался изменить стиль ttk.Progressbar
и обнаружил, что стиль будет применяться только после вызова s.theme_use
. Я не могу найти никакой документации о том, почему такое поведение происходит, но использование такой темы, как clam
, позволит применить пользовательский стиль к виджету.
Почему это нужно вызывать, чтобы стили применялись?
Другой SO post также говорит об этом.
Редактировать: видимо нужен пример?
Это должно быть замято вручную, так как код существует в другой системе, пожалуйста, прочитайте комментарии...
import tkinter as tk
import tkinter.ttk as ttk
TC = 'gray60'
BC = 'steelblue2'
s = ttk.Style()
s.configure('U.Horizontal.TProgressbar', throughcolor=TC, bordercolor=TC,
background=BC, lightcolor=BC, darkcolor=BC) # ref TKCommands doc
if __name__ == '__main__':
root = tk.Tk()
pb = ttk.Progressbar(root, style='U.Horizontal.TProgressbar', orient='horizontal', mode='determinate')
pb.pack(fill=tk.BOTH, expand=True)
# then add a button that calls a function that calls the pb.step(1)
Приведенный выше фрагмент никогда не меняет виджет, он по-прежнему зеленый по умолчанию в ОС Windows, но добавление еще одной строки, и он работает:
import tkinter as tk
import tkinter.ttk as ttk
TC = 'gray60'
BC = 'steelblue2'
s = ttk.Style()
s.theme_use('clam') # added
s.configure('U.Horizontal.TProgressbar', throughcolor=TC, bordercolor=TC,
background=BC, lightcolor=BC, darkcolor=BC) # ref TKCommands doc
if __name__ == '__main__':
root = tk.Tk()
pb = ttk.Progressbar(root, style='U.Horizontal.TProgressbar', orient='horizontal', mode='determinate')
pb.pack(fill=tk.BOTH, expand=True)
# then add a button that calls a function that calls the pb.step(1)