ttk treeview: выбранный цвет - PullRequest
       9

ttk treeview: выбранный цвет

4 голосов
/ 25 октября 2011

Выбранная строка моего дерева ttk отображается в виде темно-синего фона с белым текстом.

Если я задаю цвет строки с тегом, например:

self.tree.item(item, tags=('oddrow'))

и настройте тег как цвет, например:

self.tree.tag_configure('oddrow', background='lightgrey')

и выберите странное значение, цвет фона не меняется (он остается светло-серым), пока текст меняется с черного на белый.Как я могу сделать выбранный фон строки темно-синим, независимо от того, помечена ли строка цветом?

Строки, не отмеченные тегами, отображаются черным по белому или при выборе белого по темно-синему.

Я пытался

ttk.Style().configure('Treeview', selectbackground='blue')

, но это ничего не дало.

РЕДАКТИРОВАТЬ: я полагаю, что когда я выбираю элемент, я могу пометить его как не странный, товернуться назад, когда он не выбран, но это довольно не элегантно.

1 Ответ

2 голосов
/ 27 октября 2011

Из учебника TkDocs для деревьев кажется, что вы можете:

  • создать тег с нужными цветами (для выбранной строки)

Затем поймайте виртуальные события из дерева:

  • назначить метку строке, когда она получает фокус
  • отменить назначение тега из строки, когда он теряет фокус

Вот конкретный пункт в документации, которую я использовал:

The treeview will generate virtual events "<TreeviewSelect>", "<TreeviewOpen>" 
and "<TreeviewClose>" which allow you to monitor changes to the widget made 
by the user.   You can use the "selection" method to determine the current 
selection (the selection can also be changed from your program). 

Вместе с небольшим кодом из учебника:

tree.tag_configure('ttk', background='yellow')
tree.tag_bind('ttk', '<1>', itemClicked); # the item clicked can be found via tree.focus()

примечание: я не уверен, что это сработает. Мне придется выкопать код, чтобы увидеть, что я сделал.

...