【问题标题】:Customising ttk.Frame widget自定义 ttk.Frame 小部件
【发布时间】:2018-08-17 02:05:30
【问题描述】:

我希望能够调整ttk.Frame() 小部件的颜色。我知道这个问题已经在这里被问过很多次了。这里给出了一个非常有用的答案:Change color of "tab header" in ttk.Notebook。可以使用style.theme_create() 来做到这一点。

我想使用ttk.Style() 进行类似的调整,但不知道怎么做。有人可以向我解释我该怎么做吗?

我没有使用上面链接中建议的方法的原因是我的代码中有其他小部件我想(并且可以)使用ttk.Style() 进行自定义。

import tkinter as tk
from tkinter import ttk

class Window():
    def __init__(self, parent):
        self.parent = parent
        self.parent.minsize(width=600, height=400)
        self.widgets()

    def widgets(self):   
        s1 = ttk.Style()
        s1.configure('My.TNotebook.Tab', padding=5, background='red')
        s1.map('My.TNotebook.Tab', background=[('selected', 'green')])

        self.nb1 = ttk.Notebook(self.parent, style='My.TNotebook.Tab')
        self.tab1 = ttk.Frame(self.nb1)        
        self.tab2 = ttk.Frame(self.nb1)
        self.tab3 = ttk.Frame(self.nb1)   
        self.nb1.add(self.tab1, text='Tab1')
        self.nb1.add(self.tab2, text='Tab2')
        self.nb1.add(self.tab3, text='Tab3')
        self.nb1.place(relx=0.1, rely=0.1, width=500, height=200)
        self.b1 = ttk.Button(self.parent, text='Quit', command=self.quit)
        self.b1.place(relx=0.4, rely=0.7, height=70, width=150)

    def quit(self):
        self.parent.destroy()

root = tk.Tk()
app = Window(root)
root.mainloop()

【问题讨论】:

  • 这个answer 可能会对你有所帮助。
  • 如果你需要改变一个框架的颜色,为什么不使用标准的tkinter Frame呢?改变它的颜色非常容易。
  • @martineau 你是对的,虽然它看起来有点太复杂了。我真的希望有机会简单地使用ttk.Style.configure()。我会调查那个答案。
  • @Bryan Oakley 我想我没有正确表达自己。我需要的是能够改变ttk.Notebook 标签的样式。我最初的猜测是对ttk.Frame 做点什么,因为这就是标签的构造方式。

标签: python tkinter ttk


【解决方案1】:

我搜索了更多,并在这里找到了一个有趣且简单的解决方案:http://page.sourceforge.net/html/themes.html。解决问题的关键似乎是需要告诉 Python 使用哪个主题(我在 Windows 上运行 Python)。在我的回答中,我使用classic,但winnativeclamaltdefault 也可以。使用vistaxpnative 不会影响选项卡的颜色。

import tkinter as tk
from tkinter import ttk

class Window():
    def __init__(self, parent):
        self.parent = parent
        self.parent.minsize(width=600, height=400)
        self.widgets()

    def widgets(self):   
        s1 = ttk.Style()
        s1.theme_use('classic')
        s1.configure('TNotebook.Tab', background='navajo white')
        s1.map('TNotebook.Tab', background=[('selected', 'goldenrod'), ('active', 'goldenrod')])

        self.nb1 = ttk.Notebook(self.parent)
        self.nb1.place(relx=0.1, rely=0.1, width=500, height=200)
        self.tab1 = ttk.Frame(self.nb1)        
        self.tab2 = ttk.Frame(self.nb1)
        self.tab3 = ttk.Frame(self.nb1)
        self.nb1.add(self.tab1, text='Tab1')
        self.nb1.add(self.tab2, text='Tab2')
        self.nb1.add(self.tab3, text='Tab3')
        self.b1 = ttk.Button(self.parent, text='Quit', command=self.quit)
        self.b1.place(relx=0.4, rely=0.7, height=70, width=150)

    def quit(self):
        self.parent.destroy()

root = tk.Tk()
app = Window(root)
root.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-27
    • 2012-08-06
    • 2011-11-05
    • 2020-10-15
    • 2016-05-17
    • 2019-03-28
    • 2019-04-01
    • 2020-11-23
    相关资源
    最近更新 更多