Tkinter ttk:背景/前景色不能在我的计算机上使用

时间:2019-06-16 05:19:56

标签: python tkinter tcl ttk

如果我通过Windows 10和7上的pycharm中的IDLE或虚拟环境运行此代码:

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了。

3 个答案:

答案 0 :(得分:1)

首先,您应该说明计算机正在运行的操作系统。第二,许多Python GUI框架不能在Mac OS上完全运行(如果您的OS类型)。例如,对于许多Python GUI框架/工具包,Mac OS倾向于阻止GUI为打开的窗口提供非标准背景色的功能。我知道大多数Python GUI在Windows操作系统上都可以完美运行,但是我不确定它们在Linux上如何工作,但是我很确定它们与Mac OS有类似的问题,因为它们都是基于Unix的(我在这里可能是错误的) ,但我不记得我的头顶了,如果我错了,请纠正我)。 尝试查找有关tkinter的文档,并查看它们对您的特定操作系统有什么注意。

此外,我注意到您要更改背景颜色,但是我只看到一个前景标签。您拥有的前台标签只是在更改字体颜色,但是如果将其更改为背景,则会将背景更改为黄色。

答案 1 :(得分:1)

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

另请参阅以下问题: How do I change the overall theme of a tkinter application?

请注意,其他平台可能具有更多限制性主题; OSX上的aqua主题特别严格地定义。 (但是,不断变化的主题不足以使应用程序看起来像是本机;不同的平台还对某些操作更喜欢使用不同的小部件,并且具有不同的GUI布局方式。GUI的某些方面的工作方式完全不同。跨平台的GUI创建仍然很困难。 )

答案 2 :(得分:0)

上一个问题的用户在删除答案之前发布了此链接: https://core.tcl-lang.org/tk/tktview/509cafafae48cba46796e12d0503a335f0dcfe0b

这引导我朝着正确的方向前进。解决方法是从tcl主题源代码中删除一些代码。可以在tcl / ttk下的pythons文件夹中找到。打开麻烦主题(例如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小部件的修复,而不是其他修复。