Найти - Пользователи
Полная версия: Как в Tkinter сделать ScrolledText красивым
Начало » GUI » Как в Tkinter сделать ScrolledText красивым
1
regall
Python 3.1.2, Tkinter.
Возникла проблема с темизацией при добавлении ScrolledText. Все контролы у меня из tkinter.ttk, а этот из tkinter.scrolledtext. Проблема в том, что сама полоса прокрутки не подхватывает тему win7, в отличии от других контролов и кнопок. Кто с этим сталкивался, и как решать?

UPD:
Более того. Ведет этот виджет себя довольно странно. При загрузке формы - кнопки полосы прокрутки то черные, то серые, но при этом неактивные. При наборе достаточного количества текста для прокрутки - они не меняют цвет, хотя становятся активными. Баги?
Griffon
C прокруткой вообще проблема.
Даже если заменить в scrolledtext виджет скрола на виджет из ttk, через print(s.element_options('My.Vertical.TScrollbar.trough')) параметры видно, но если начинаешь менять, или хочешь получить значение параметра по имени, выдаёт ошибку.
Если вдруг разберёшься, не забудь написать.
regall
Griffon
Если вдруг разберёшься, не забудь написать.
Пока на проблему забил, но вернуться к ней придется. Если вопрос решу - напишу обязательно.
igor.kaist
А если подправить сам ScrolledText, заменив ScrollBar на ttk'шный?
Griffon
В общем когда я пробовал менять на 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")
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB