小编rd_*_*sen的帖子

Tkinter ttk 背景样式的自定义未显示

在以下代码中,该show_widget_validity()函数要么应用仅更改小部件现有样式的背景颜色的自定义样式,要么恢复原始样式。这是一个库例程,因此不能完全控制样式。背景颜色似乎已正确重新配置,如每次更改后条目小部件中报告的背景样式描述所示。但是,小部件的实际背景颜色不会改变。

此行为出现在使用 Python 2.7 和 3.6 的 Linux 上以及使用 Python 2.7 的 Windows 上;其他环境我没有测试过。

任何有关此行为原因的线索,或解释此行为所需的代码更改,将不胜感激。

编辑:使用“fieldbackground”代替“background”在Linux上有效,但在Windows上无效,并且不允许在禁用状态下修改背景颜色。

try:
    import Tkinter as tk
except:
    import tkinter as tk
try:
    import ttk
except:
    from tkinter import ttk


def show_widget_validity(widget, is_valid):
    invalid_color = "#fff5ff"
    invalid_disabled_color = "#f6f0f6"
    sname = widget["style"] or widget.winfo_class()
    if sname.startswith("Invalid."):
        if is_valid:
            widget['style'] = sname[8:]
    else:
        if not is_valid:
            invname = "Invalid." + sname
            ttk.Style().configure(invname, background=[('disabled', invalid_disabled_color), ('active', invalid_color)])
            # Simpler, but also ineffective:
            #ttk.Style().configure(invname, background=invalid_color)
            widget['style'] …
Run Code Online (Sandbox Code Playgroud)

python tkinter ttk tkinter.style

2
推荐指数
1
解决办法
4162
查看次数

标签 统计

python ×1

tkinter ×1

tkinter.style ×1

ttk ×1