Я хочу изменить цвет виджета ttk :: combobox. Это мой код:
set MyBackgroundColor #00FF00
set MyForegroundColor #FF0000
font create MyFont -family Helvetica -size 12 -slant roman -weight normal
ttk::style theme use default
ttk::style configure TCombobox -font MyFont -background $MyBackgroundColor -fieldbackground $MyBackgroundColor -foreground $MyForegroundColor
option add *ComboboxPopdown.f.l.font MyFont
option add *ComboboxPopdown.f.l.background $MyBackgroundColor
option add *ComboboxPopdown.f.l.foreground $MyForegroundColor
# option add *ComboboxPopdown.f.l.selectbackground $MyBackgroundColor
# option add *ComboboxPopdown.f.l.selectforeground $MyForegroundColor
set Liste {Anton Berta Caesar}
set MyVar [lindex $Liste 0]
ttk::combobox .cb -values $Liste -textvariable MyVar -font MyFont -background $MyBackgroundColor -foreground $MyForegroundColor
pack .cb
Если я открою поле со списком и наведу указатель мыши на записи, они будут выделены черным цветом шрифта и серым цветом фона. Можно ли изменить эти цвета?
Вы можете изменить цвета всплывающих окон с помощью следующих опций:
option add *TCombobox*Listbox.background color
option add *TCombobox*Listbox.foreground color
option add *TCombobox*Listbox.selectBackground color
option add *TCombobox*Listbox.selectForeground color
Редактировать:
Если вам нужно изменить цвета определенного всплывающего окна или изменить цвета после создания поля со списком:
set popdown [ttk::combobox::PopdownWindow .combo]
$popdown.f.l configure -background color
Ссылки: wiki: Изменение цвета виджета
Я изменил команду ttk::style map
на ttk::style map TCombobox -background [list disabled color readonly color]
и ttk::style map TCombobox -fieldbackground [list disabled color readonly color]
, и она отлично работает. Это также решило проблему с виджетом родительского фрейма.
Похоже, что фоновые цвета списка должны быть установлены до создания экземпляра поля со списком. Вам нужно их динамически менять?
Это работает, если состояние поля со списком не только для чтения. Итак, я добавил
ttk::style map TCombobox state {}
. Это верно? Другая проблема возникает, когда виджет combox является потомком виджета фрейма. Тогда цвет фона снова станет серым.