pythontkinterttk

Change color of "tab header" in ttk.Notebook


Gretings!

I want to change the color displayed in a tab header, created using ttk.Notebook. After search for a while I've found that to change the style of ttk widgets, we can use ttk. Styling, because Notebook apparently do not have configuration options to change its colors. However, I only found how to change the background and the foreground of a NoteBook object, but not how to configure the "tab header", whose background is either white (when selected) or grey (when not selected).

Anybody can help me with this?

This is the code that I have for now, related with what I'm trying to do

import Tkinter as tki
import ttk

...
##Other code. Not relevant here
...

#create tabs and associate the apropriate frames to it
tabs = ttk.Notebook(parent.master)
ttk.Style().configure("TNotebook", background=mainWcolor, foreground='green')   #configure "tabs" background color

paramsFrame = tki.Frame(tabs, bg=mainWcolor)   #frame with control parameters
comsFrame = tki.Frame(tabs, bg=mainWcolor)     #frame with communication parameters.
ssInfoFrame = tki.Frame(tabs, bg=mainWcolor)   #frame with start and stop messages and procedures

tabs.add(paramsFrame, text = "Control")
tabs.add(comsFrame, text = "Communications")
tabs.add(ssInfoFrame, text = "Start & Stop info")
tabs.pack()

Thanks in advance.


Solution

  • You can try creating a custom theme.

    import tkinter as tk
    from tkinter import ttk
    
    root = tk.Tk()
    
    mygreen = "#d2ffd2"
    myred = "#dd0202"
    
    style = ttk.Style()
    
    style.theme_create( "yummy", parent="alt", settings={
            "TNotebook": {"configure": {"tabmargins": [2, 5, 2, 0] } },
            "TNotebook.Tab": {
                "configure": {"padding": [5, 1], "background": mygreen },
                "map":       {"background": [("selected", myred)],
                              "expand": [("selected", [1, 1, 1, 0])] } } } )
    
    style.theme_use("yummy")
    
    note = ttk.Notebook(root)
    f1 = ttk.Frame(note, width=300, height=200)
    note.add(f1, text = 'First')
    f2 = ttk.Frame(note, width=300, height=200)
    note.add(f2, text = 'Second')
    note.pack(expand=1, fill='both', padx=5, pady=5)
    
    tk.Button(root, text='yummy!').pack(fill='x')
    
    root.mainloop()
    

    EDIT

    The most detailed ttk documentation is from the tcl/tk world

    eg.

    http://www.tcl.tk/man/tcl/TkCmd/ttk_notebook.htm

    For some useful python-based examples, you can grab the pyttk-samples package from http://code.google.com/p/python-ttk/