首页 > 解决方案 > Tkinter ttk:背景/前景色在我的电脑上不起作用

问题描述

如果我在 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 了。

标签: pythontkintertclttk

解决方案


对于大多数 ttk 小部件(尤其包括树视图)本机运行时(可能是或) winnative, Windows 上的默认主题不允许您更改背景颜色。其他主题(例如,或)允许您更改该方面(或者他们不会忽略它);由主题来选择是否忽略您的设置,并且本机主题优先遵循平台 GUI 设计指南而不是您提供的指令。xpnativevistaaltclassicclam

另请参阅此问题: 如何更改 tkinter 应用程序的整体主题?

请注意,其他平台可能有更严格的主题;OSX的aqua主题定义特别严格。(虽然改变主题并不足以让应用程序感觉是原生的;不同的平台也喜欢使用不同的小部件进行某些操作,并且有不同的方式来布置它们的 GUI。此外,GUI 的某些方面完全不同。跨平台的 GUI 创建仍然很困难。 )


推荐阅读