В общем когда я пробовал менять на ttk (первый пост), оно не работало так как надо сначала обязательно(!) выбрать Style.theme_use(). Без выбора темы другие виджеты настраиваются, а этот нет.
Для теста изменил
ScrolledText.py вот так:
from tkinter import Text, Pack, Grid, Place
from tkinter.ttk import Frame, Style, Scrollbar
from tkinter.constants import RIGHT, LEFT, Y, BOTH
Style().theme_use("default")
Style().layout("Vertical.My.TScrollbar", Style().layout("Vertical.TScrollbar"))
Style().configure("Vertical.My.TScrollbar", background="#9F9", troughcolor="black", arrowcolor="#388", arrowsize=15)
Style().map("Vertical.My.TScrollbar", background=(("disabled", "#CFC"),))
class ScrolledText(Text):
def __init__(self, master=None, **kw):
self.frame = Frame(master)
self.vbar = Scrollbar(self.frame, style="My.TScrollbar")
остальное не менялось.
И всё начало нормально раскрашиваться. Правда поменять фон стрелки отдельно от всего остального не удалось.
upd: Ещё одна важная вещь. Для разных тем существует разное количество параметров, которые можно менять. Например если использовать
calm, настроек будет больше (потому что выглядит иначе). Можно посмотреть:
for theme in Style().theme_names():
Style().theme_use(theme)
print(theme)
print(Style().element_options("Vertical.TScrollbar.trough"))
print(Style().element_options("Vertical.TScrollbar.thumb"))
print(Style().element_options("Vertical.TScrollbar.uparrow"), "\n")