如何在Mac上为ttk / Tkinter的笔记本中的Frame匹配背景颜色?

时间:2014-10-20 18:34:43

标签: python macos tkinter tk ttk

在我的Mac上使用基于Tkinter + ttk的GUI时,我注意到背景颜色和Notebook小部件存在问题。将ttk.Frame添加为ttk.Notebook标签时,框架的显示背景与' inset'不匹配。笔记本选项卡的背景。

如何使ttk.Frame与周围的背景颜色相匹配,而不对非Mac用户看起来很奇怪的值进行硬编码?

example of frame background mismatch

我读了一些提示自定义样式的SO答案,但是在这种情况下,如何查询父窗口小部件的背景颜色还不清楚。据我所知,他们都是一样的!

>>> ttk.Style().lookup("TFrame", "background")
'systemWindowBody'
>>> ttk.Style().lookup("Notebook", "background")
'systemWindowBody'
>>> ttk.Style().lookup("Notebook.client", "background")
'systemWindowBody'
>>> ttk.Style().lookup("Notebook.tab", "background")
'systemWindowBody'

以上屏幕截图的示例代码

import Tkinter
import ttk

class GUI(object):
    def __init__(self,root):
        self.root = root
        self.root.title(u"Frame Mismatch Example")
        self.mainframe = ttk.Frame(self.root, padding=(6, 6, 12, 12))
        self.mainframe.grid(sticky='nwse')

        self.notebook = ttk.Notebook(self.mainframe)
        self.tab1 = ttk.Frame(self.notebook)
        ttk.Button(self.tab1, text='Exit', command=self.root.destroy).pack(padx=100, pady=100)
        self.notebook.add(self.tab1, text="Tab 1")
        self.notebook.pack()

def main():
    root = Tkinter.Tk()
    root.columnconfigure(0, weight=1)
    root.rowconfigure(0, weight=1)
    makeGUI = GUI(root)
    root.mainloop()

if __name__ == '__main__':
    main()

重要细节:这与Python 2.7.8,Tcl / Tk 8.5.15(由Tk.eval('info patchlevel')报告)一起提供。

1 个答案:

答案 0 :(得分:2)

我遇到了'systemWindowBody'问题,只是使用sys.platform检查了操作系统,并仅为OSX硬编码颜色。

如果您有大量小部件,则可以使用OSX的特定主题。 (这是我发现的一个很好的tkinter主题答案:Change color of "tab header" in ttk.Notebook

我知道这可能不太理想,但至少可以确保你不会搞砸其他平台上的外观。