Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting background color of a tkinter ttk frame

I want to simply set a background color to the frame within the tkinter window. The background color for the window was successfully set, but not for the frame inside. Simply entering bg='color_name or color_code' is not working.

How can one set the background color of a ttk frame?

In addition to this, is there a method to also change other widget options i.e. the color, fonts of the tabs bar?

I have tried using command bg='Color_name or color_code' and also tried using frame_name=config(bg='color_name or color_code'). Neither worked.

from tkinter import * 
from tkinter import ttk 


window = Tk() 
window.title("Title Name") 
window.config(bg='#FFFAFA')
window.geometry('1024x800')


menubar = Menu(window) 
filemenu = Menu(menubar,tearoff=0)
menubar.add_cascade(label='File',menu=filemenu)
filemenu.add_command(label='Open')
filemenu.add_command(label='Clear')
filemenu.add_command(label='Save As')
filemenu.add_separator()
filemenu.add_command(label='Exit')


helpmenu = Menu(menubar,tearoff=0)
menubar.add_cascade(label='Help',menu=helpmenu)
helpmenu.add_command(label='Precuations')
helpmenu.add_command(label='Version Info')
helpmenu.add_command(label='Technical Support')

window.config(menu=menubar)

rows = 0
while rows<50:
    window.rowconfigure(rows,weight=1)
    window.columnconfigure(rows, weight=1)
    rows +=1

#creation of frame
mainframe = ttk.Notebook(window,width=50)
mainframe.grid(row=1,column=2,columnspan=45,rowspan=43,sticky='NESW')

#create tabs within the frame
tab1 = ttk.Frame(mainframe)
mainframe.add(tab1, text="Tab1")


tab2 = ttk.Frame(mainframe)
mainframe.add(tab2, text="Tab2")


tab3 = ttk.Frame(mainframe)
mainframe.add(tab3, text="Tab3")

tab4 = ttk.Frame(mainframe)
mainframe.add(tab4, text="Tab4")

tab5 = ttk.Frame(mainframe)
mainframe.add(tab5, text="Tab4")

window.mainloop()
like image 504
Pratyush Karna Avatar asked Feb 01 '19 09:02

Pratyush Karna


People also ask

How do I change the background color in TTK?

We can set the background color, foreground color, and other attributes of the Combobox widget by visiting the configure function in ttk and passing 'TCombobox' as the first parameter.

Is TTK better than tkinter?

ttk supports a variety of widgets as compared to tkinter widgets. Tkinter. ttk doesn't support Place, Pack() and Grid(), thus it is recommended to use tkinter widget with ttk. Ttk has many features and configurations that extend the functionality of a native application and make it look more modern.

What do we use to change the background color of a widget?

On your Android phone or tablet, open the Google app . At the top right, tap your Profile picture or initial Settings Search widget. At the bottom, tap the icons to customize the color, shape, transparency and Google logo. Tap Done.

How do you add a background color in python?

How do I change the background color in python? Right-click the upper-left corner of the Python console window and select Properties. In the dialog box that appears, pick the tab labeled Colors. On it you can set the screen background and text color.


1 Answers

When using ttk widgets, all styling should be done using ttk.Style.

You need to initialize the style class with s = ttk.Style(), and can then change attributes of the different widget styles with s.configure('StyleName', option='value')

You can find the default style names here. So for a Frame the style name is TFrame. When you configure an option for this style, it will be used by all frames. When you want to configure an option for a single frame, you can create a new style based on the original style by using a name of the form newName.oldName. In your case, this could be Frame1.TFrame. You can then tell a frame to use this style by passing style='Frame1.TFrame'.

If you use the following in your code, you will see that the first frame is red, the second is blue and all other frames are green:

# Initialize style
s = ttk.Style()
# Create style used by default for all Frames
s.configure('TFrame', background='green')

# Create style for the first frame
s.configure('Frame1.TFrame', background='red')
# Use created style in this frame
tab1 = ttk.Frame(mainframe, style='Frame1.TFrame')
mainframe.add(tab1, text="Tab1")

# Create separate style for the second frame
s.configure('Frame2.TFrame', background='blue')
# Use created style in this frame
tab2 = ttk.Frame(mainframe, style='Frame2.TFrame')
mainframe.add(tab2, text="Tab2")
like image 199
fhdrsdg Avatar answered Sep 28 '22 20:09

fhdrsdg