Tkinter ttk:background/foregound 颜色在我的电脑上不起作用
Tkinter ttk: background/foregound color will not work on my computer
如果我 运行 在 windows 10 和 7 上通过 IDLE 或 pycharm 中的虚拟环境编写此代码:
import tkinter as tk
from tkinter import ttk
x = tk.Tk()
y = ttk.Treeview(x)
y.insert('',0,values=['red', 'blue'], tags= ('even',))
y['columns'] = ('color1','color2')
for item in y['columns']:
y.heading(item, text=item)
y.tag_configure('even',foreground='yellow',font=('',25))
y.pack()
x.mainloop()
它改变了字体但不改变背景颜色。当来自 https://repl.it/languages/tkinter 的 运行 和另一位用户指出他从 jupyter notebook 中成功 运行 时,此代码确实有效。 tkinter/tcl 版本与我两台计算机上的版本相同。但是,我仍然得到了简单的默认设置。
这在所有 ttk 小部件(例如组合框)中似乎也是一致的。
我已经尝试了每一个主题,并在 tcl 代码中弄乱了映射。非常困惑为什么我要 运行 关注这个问题。这里有人遇到过这个吗?可能是时候切换到 pyQT 了。
首先,您应该说明 OS 您的计算机是什么 运行。其次,很多 Python GUI 框架不能完全在 Mac OS 上工作(in-case 那是你的 OS 类型)。例如,对于许多 Python GUI frameworks/toolkits,Mac OS 倾向于阻止 GUI 具有 non-standard 背景颜色的能力windows。我知道大多数 Python GUI 在 Windows OS 上运行完美,但我不确定它们在 Linux 上如何运行,但我很确定它们有类似的问题到 Mac OS 因为它们都是基于 unix 的(我在这里可能是错的,但我不记得了,所以如果我错了请纠正我)。
尝试查找 tkinter 的文档,看看他们对您的特定 OS.
有什么通知
此外,我注意到您想要更改背景颜色,但我只看到前景标记。您拥有的前景标签只是更改字体颜色,但如果将其更改为背景,它确实会将背景更改为黄色。
对于大多数 ttk 小部件(尤其是包括树视图)不允许您更改背景颜色。其他主题(例如 alt
、classic
或 clam
)可让您更改该方面(或者更确切地说,它们不会忽略它);是否忽略您的设置取决于主题,原生主题优先遵循平台 GUI 设计指南,而不是您提供的指令。
另见这个问题:
How do I change the overall theme of a tkinter application?
请注意,其他平台可能有更严格的主题; OSX 上的 aqua
主题定义特别严格。 (虽然改变主题不足以让应用程序感觉原生;不同的平台也喜欢不同的小部件来进行某些操作,并且有不同的 GUI 布局方式。而且 GUI 的某些方面的工作方式完全不同。跨平台 GUI 创建仍然很困难。 )
前一个问题的用户在删除他的回答之前发布了这个 link:
https://core.tcl-lang.org/tk/tktview/509cafafae48cba46796e12d0503a335f0dcfe0b
这让我朝着正确的方向前进。解决方法是从 tcl 主题源代码中删除一些代码。它位于 tcl/ttk 下的 pythons 文件夹中。打开麻烦主题(ex.clam, winnative),找到这段代码:
ttk::style map Treeview \
-background [list disabled $colors(-frame)\
{!disabled !selected} $colors(-window) \
selected $colors(-selectbg)] \
-foreground [list disabled $colors(-disabledfg) \
{!disabled !selected} black \
selected $colors(-selectfg)]
需要删除{!disabled !selected} $colors(-window) \
和{!disabled !selected} black \
。 cjmcdonald 在 tcl-lang 论坛上发现了这个。你最终应该得到:
ttk::style configure Treeview -background $colors(-window)
ttk::style map Treeview \
-background [list disabled $colors(-frame)\
selected $colors(-selectbg)] \
-foreground [list disabled $colors(-disabledfg) \
selected $colors(-selectfg)]
我能够让它工作的唯一方法是直接从源代码中删除。我相信这里有人可以将其简化为 python。
这只是针对 Treeview 小部件而非其他小部件的修复。
如果我 运行 在 windows 10 和 7 上通过 IDLE 或 pycharm 中的虚拟环境编写此代码:
import tkinter as tk
from tkinter import ttk
x = tk.Tk()
y = ttk.Treeview(x)
y.insert('',0,values=['red', 'blue'], tags= ('even',))
y['columns'] = ('color1','color2')
for item in y['columns']:
y.heading(item, text=item)
y.tag_configure('even',foreground='yellow',font=('',25))
y.pack()
x.mainloop()
它改变了字体但不改变背景颜色。当来自 https://repl.it/languages/tkinter 的 运行 和另一位用户指出他从 jupyter notebook 中成功 运行 时,此代码确实有效。 tkinter/tcl 版本与我两台计算机上的版本相同。但是,我仍然得到了简单的默认设置。
这在所有 ttk 小部件(例如组合框)中似乎也是一致的。
我已经尝试了每一个主题,并在 tcl 代码中弄乱了映射。非常困惑为什么我要 运行 关注这个问题。这里有人遇到过这个吗?可能是时候切换到 pyQT 了。
首先,您应该说明 OS 您的计算机是什么 运行。其次,很多 Python GUI 框架不能完全在 Mac OS 上工作(in-case 那是你的 OS 类型)。例如,对于许多 Python GUI frameworks/toolkits,Mac OS 倾向于阻止 GUI 具有 non-standard 背景颜色的能力windows。我知道大多数 Python GUI 在 Windows OS 上运行完美,但我不确定它们在 Linux 上如何运行,但我很确定它们有类似的问题到 Mac OS 因为它们都是基于 unix 的(我在这里可能是错的,但我不记得了,所以如果我错了请纠正我)。 尝试查找 tkinter 的文档,看看他们对您的特定 OS.
有什么通知此外,我注意到您想要更改背景颜色,但我只看到前景标记。您拥有的前景标签只是更改字体颜色,但如果将其更改为背景,它确实会将背景更改为黄色。
对于大多数 ttk 小部件(尤其是包括树视图)不允许您更改背景颜色。其他主题(例如 alt
、classic
或 clam
)可让您更改该方面(或者更确切地说,它们不会忽略它);是否忽略您的设置取决于主题,原生主题优先遵循平台 GUI 设计指南,而不是您提供的指令。
另见这个问题: How do I change the overall theme of a tkinter application?
请注意,其他平台可能有更严格的主题; OSX 上的 aqua
主题定义特别严格。 (虽然改变主题不足以让应用程序感觉原生;不同的平台也喜欢不同的小部件来进行某些操作,并且有不同的 GUI 布局方式。而且 GUI 的某些方面的工作方式完全不同。跨平台 GUI 创建仍然很困难。 )
前一个问题的用户在删除他的回答之前发布了这个 link: https://core.tcl-lang.org/tk/tktview/509cafafae48cba46796e12d0503a335f0dcfe0b
这让我朝着正确的方向前进。解决方法是从 tcl 主题源代码中删除一些代码。它位于 tcl/ttk 下的 pythons 文件夹中。打开麻烦主题(ex.clam, winnative),找到这段代码:
ttk::style map Treeview \
-background [list disabled $colors(-frame)\
{!disabled !selected} $colors(-window) \
selected $colors(-selectbg)] \
-foreground [list disabled $colors(-disabledfg) \
{!disabled !selected} black \
selected $colors(-selectfg)]
需要删除{!disabled !selected} $colors(-window) \
和{!disabled !selected} black \
。 cjmcdonald 在 tcl-lang 论坛上发现了这个。你最终应该得到:
ttk::style configure Treeview -background $colors(-window)
ttk::style map Treeview \
-background [list disabled $colors(-frame)\
selected $colors(-selectbg)] \
-foreground [list disabled $colors(-disabledfg) \
selected $colors(-selectfg)]
我能够让它工作的唯一方法是直接从源代码中删除。我相信这里有人可以将其简化为 python。
这只是针对 Treeview 小部件而非其他小部件的修复。