获取 ttk.Frame 的默认背景

get default background of ttk.Frame

我通过改编此 example 并将其移植到 Python3.

将滚动条与 ttk 笔记本结合在一起

我尽可能多地使用 ttk 小部件以获得更多 'modern' UI。但是,没有 ttk canvas 小部件,所以我使用了标准的 tkinter canvas。默认情况下 canvas 小部件的背景颜色似乎是白色的(至少在 Mac OS 上是这样),而所有 ttk 小部件的默认背景都是灰色的(见下面的截图)。

如何获取包含标签小部件的ttk框架的默认背景,以便我可以通过Canvas(parent, background='bg_color')将其传递给canvas并删除周围的白色space包含 ttk 标签的 ttk 帧?

我知道 ttk 使用 styles 来定义小部件的外观。但是,我不知道如何读取(默认)样式的背景值。

#!/usr/bin/env python3
# coding: utf-8

from tkinter import *
from tkinter import ttk

master = Tk()

def populate():
    """Put in some fake data"""
    for row in range(100):
        ttk.Label(frame, text="%s" % row, width=3, borderwidth="1", relief="solid").grid(row=row, column=0)
        t="this is the second column for row %s" % row
        ttk.Label(frame, text=t).grid(row=row, column=1)

def OnFrameConfigure(event):
    """Reset the scroll region to encompass the inner frame"""
    canvas.configure(scrollregion=canvas.bbox("all"))

nbook = ttk.Notebook(master)
nbook.grid()
tab = Frame(nbook)

canvas = Canvas(tab, borderwidth=0)
frame = ttk.Frame(canvas)
vsb = Scrollbar(tab, orient="vertical", command=canvas.yview)
canvas.configure(yscrollcommand=vsb.set)

vsb.pack(side="right", fill="y")
canvas.pack(side='left', fill='both', expand=True)
canvas.create_window((0, 0), window=frame, anchor='nw', tags='frame')

frame.bind("<Configure>", OnFrameConfigure)

populate()

nbook.add(tab, text='Test')

master.mainloop()

您可以使用s.lookup()获取样式设置。如果你想要 ttk 框架的背景设置,请使用:

s = ttk.Style()
bg = s.lookup('TFrame', 'background')

您可以将其应用到您的 Canvas:

canvas = Canvas(tab, borderwidth=0, background=bg)

我遇到了,类似的问题。将背景颜色设置为 'systemWindowBody' 没有任何作用。

进一步搜索后,我发现了这个带有 tkinter 颜色的网站 (http://www.science.smith.edu/dftwiki/index.php/Color_Charts_for_TKinter)

我找到了最接近 Mac OS 灰色的匹配项 'gray93'。也许这可以帮助您获得相同的颜色。

对于任何想知道如何获取框架(或小部件)颜色的人,您可以使用以下行

widget.cget('bg')

其中 widget 是您要从中检索背景颜色的小部件。

因此,对于一个框架你可以这样做:

your_frame.cget('bg')