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()
之后)
尝试可靠地更改 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()
之后)