I have a simple GUI that has three Frames. One of those frames is a Notebook frame containing a canvas. The problem is the Notebook frame doesn't expand to fit the window. I've tried all different combinations of grid() and pack(). Nothing seems to work for me. So I've finally come here. I hope someone here can tell me what I'm doing wrong. Included is a stripped down version of my code:
from tkinter import *
import ttk
window = Tk()
window.geometry("640x480")
window.title("Notebook Test")
options_list = ["one", "two", "three"]
def doNothing():
pass
leftFrame = Frame(window)
tabFrame = Frame(window)
statusFrame = Frame(window)
leftFrame.grid(row=0, column=0, sticky="n")
tabFrame.grid(row=0, column=1, sticky="nw")
statusFrame.grid(row=2, column=0, columnspan=2, sticky="ew")
Xlabel = Label(leftFrame, text="X Function", anchor=N)
Xlabel.pack()
x_var = StringVar(leftFrame)
x_menu = ttk.Combobox(leftFrame, textvariable=x_var)
x_menu["values"] = options_list
x_menu.current(0)
x_menu.pack()
tab_control = ttk.Notebook(tabFrame)
tab1 = ttk.Frame(tab_control)
tab2 = ttk.Frame(tab_control)
tab_control.add(tab1, text="Default One")
tab_control.add(tab2, text="Default Two")
tab_control.grid()
canvas1 = Canvas(tab1, bg="blue")
canvas2 = Canvas(tab2, bg="green")
canvas1.grid()
canvas2.grid()
tab_control.bind("<ButtonPress-1>", doNothing, True)
tab_control.bind("<ButtonPress-2>", doNothing, True)
tab_control.bind("<ButtonPress-3>", doNothing, True)
status = Label(statusFrame, text = "Status:", bd=1, relief=SUNKEN, anchor=W)
status.pack(fill=X, expand=True)
window.grid_rowconfigure(1, weight=1)
window.grid_columnconfigure(1, weight=1)
window.mainloop()
Here is a picture of what I currently have:
Notebook Frame that won't resize
As you can see, the "blue" part should fill much more of the window.
Thanks!
Just pass height
and width
to your notebook widget:
tab_control = ttk.Notebook(tabFrame,height=480,width=495)
To have your tab scales, bind a <Configure>
event to your root window:
def conf(event):
tab_control.config(height=window.winfo_height(),width=window.winfo_width()-145)
window.bind("<Configure>",conf)