ttk:Combobox 前景颜色更改无法正常工作。怎么了?

ttk:Combobox foreground color change doesn't work properly. What's wrong?

尝试可靠地更改 ttk::Combobox 中的文本颜色失败。 它发生在 Windows 10 的原生主题上。

以下代码创建了两个前景色设置为红色的组合框。 在其中一个选项中选择另一个选项,来回显示前景色在黑色和红色之间交替。

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
ttk.Style().configure('Red.TCombobox', foreground='red')
combo = ttk.Combobox(root, values=('one', 'two', 'three'), state='readonly')
combo.configure(style='Red.TCombobox')
combo.grid(row=0, column=0)
combo2 = ttk.Combobox(root, values=('one', 'two', 'three'), state='readonly')
combo2.configure(style='Red.TCombobox')
combo2.grid(row=0, column=1)
root.mainloop()

这是它的样子:

当文本没有被标记为选中时,我怎样才能让它至少变成红色? (也将不胜感激所选文本的解决方案)

尝试从以下位置修改您的 Style 实例:

ttk.Style().configure('Red.TCombobox', foreground='red')

至:

ttk.Style().map(
    'Red.TCombobox',
    foreground=[('readonly', 'red')],
    selectforeground=[('readonly', 'red')],
)

在这里使用 map() 允许您指定“statespec”(即,您的样式适用的小部件状态)- 您可以阅读更多内容 here

奖励 - 为列表项着色:

如果您希望 所有 列表项都是红色的,您(不幸的是)不能使用 Style() class。相反,您可以使用 Tk.option_add - 您可以阅读更多内容 here(稍微向上滚动到“创建自定义样式”上方的 'Note')

在这种情况下,您需要添加

root.option_add('*TCombobox*Listbox.foreground', 'red')

root.mainloop() 之前的任何位置(最好在 root = tk.Tk() 之后)