Frame
Frame is another container that you can use to organize the widgets. Let's start with a simple base:
import tkinter base = tkinter.Tk() base.title("frame example") base.mainloop()
Run this program, and you will see the main window, let's add the frame now:
import tkinter base = tkinter.Tk() base.title("frame example") frame = tkinter.Frame(base) frame.pack() base.mainloop()
Now you will see nothing but the icon appear, that is because frame shrinks to the size of the components/widgets that are placed on it, and by default is 0, and now you don't see the base window either, because it shrinks to the size of the components placed in it, but has a default non-0 size, let's place a button on the frame:
import tkinter base = tkinter.Tk() base.title("frame example") frame = tkinter.Frame(base) frame.pack() btn1 = tkinter.Button(frame, text="ClickMe") btn1.pack() base.mainloop()
note how we passed the frame as the container to the button, not the base, we now have a visible window stretched just enough to accommodate for the button size
By default, the containers align and center it, you can pass the relative alignment to the pack() method
import tkinter base = tkinter.Tk() base.title("frame example") frame = tkinter.Frame(base) frame.pack() btn1 = tkinter.Button(frame, text="One") btn2 = tkinter.Button(frame, text="Two") btn3 = tkinter.Button(frame, text="Three") btn1.pack(side=tkinter.LEFT) btn2.pack(side=tkinter.LEFT) btn3.pack(side=tkinter.LEFT) frame2 = tkinter.Frame(base) frame2.pack() btn1 = tkinter.Button(frame2, text="One") btn2 = tkinter.Button(frame2, text="Two") btn3 = tkinter.Button(frame2, text="Three") btn4 = tkinter.Button(frame2, text="Four") btn5 = tkinter.Button(frame2, text="Five") btn1.pack(side=tkinter.LEFT) btn2.pack(side=tkinter.LEFT) btn3.pack(side=tkinter.LEFT) btn4.pack(side=tkinter.LEFT) btn5.pack(side=tkinter.LEFT) base.mainloop()
Here are some more options on the alignment usage:
import tkinter base = tkinter.Tk() base.title("frame example") frame = tkinter.Frame(base) frame.pack() btn1 = tkinter.Button(frame, text="One") btn2 = tkinter.Button(frame, text="Two") btn3 = tkinter.Button(frame, text="Three") btn1.pack(side=tkinter.RIGHT) btn2.pack(side=tkinter.BOTTOM) btn3.pack(side=tkinter.TOP) frame2 = tkinter.Frame(base) frame2.pack() btn1 = tkinter.Button(frame2, text="One") btn2 = tkinter.Button(frame2, text="Two") btn3 = tkinter.Button(frame2, text="Three") btn4 = tkinter.Button(frame2, text="Four") btn5 = tkinter.Button(frame2, text="Five") btn1.pack(side=tkinter.RIGHT) btn2.pack(side=tkinter.RIGHT) btn3.pack(side=tkinter.RIGHT) btn4.pack(side=tkinter.RIGHT) btn5.pack(side=tkinter.RIGHT) base.mainloop()