获取ttk.Frame的默认背景

问题描述 投票:2回答:2

我通过修改此example并将滚动条与ttk笔记本结合在一起,并将其移植到Python3。

我尽可能多地使用ttk小部件来获得更“现代”的UI。但是,没有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()
python canvas tkinter tk ttk
2个回答
4
投票

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

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

您可以将其应用于画布:

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

0
投票

我遇到了类似的问题。将背景色设置为'systemWindowBody'不会执行任何操作。

进一步搜索时,我发现该网站带有tkinter颜色(http://www.science.smith.edu/dftwiki/index.php/Color_Charts_for_TKinter

enter image description here

我发现与Mac OS灰色最接近的匹配项是'gray93'。也许可以帮助您获得相同的颜色。

© www.soinside.com 2019 - 2024. All rights reserved.