获取 ttk.Frame 的默认背景

alb*_*ert 3 python tk-toolkit canvas tkinter ttk

我通过调整这个例子并将它的移植到 Python3 ,将滚动条与 ttk notebook 结合起来。

我尽可能频繁地使用 ttk 小部件来获得更“现代”的用户界面。但是,没有 ttk 画布小部件,所以我使用了标准的 tkinter 画布。默认情况下,画布小部件的背景颜色似乎是白色(至少在 Mac OS 上),而所有 ttk 小部件的默认背景都是灰色(请参见下面的屏幕截图)。

如何获取包含标签小部件的 ttk 框架的默认背景,以便我可以将其传递到画布Canvas(parent, background='bg_color')并删除包含 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()
Run Code Online (Sandbox Code Playgroud)

fhd*_*sdg 6

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

s = ttk.Style()
bg = s.lookup('TFrame', 'background')
Run Code Online (Sandbox Code Playgroud)

您可以将其应用于 Canvas:

canvas = Canvas(tab, borderwidth=0, background=bg)
Run Code Online (Sandbox Code Playgroud)