Python ttk.Frame be change by gird()

Viewed 17

I want to put another Frame in ttk.Notebook(), I use ttk.Frame() to do that.

Because tk.Frame() can't put multiple frame in ttk.Notebook().

Code:

import tkinter as tk
import tkinter.ttk as ttk


def Notebook(root: tk.Tk) -> tk.Frame:
    notebook=ttk.Notebook(root)
    f1 = tk.Frame()
    f2 = tk.Frame()
    notebook.add(f1, text="First") 
    notebook.add(f2, text="Second") 
    notebook.pack(padx=10, pady=10, fill='both', expand=True)
    return f1

def ttkFrame(frame: tk.Frame) -> ttk.Frame:
    f = ttk.Frame(frame, width=200, height=100)
    ttk.Style().configure('TFrame', background='#DCB5FF')
    f.grid(row=0, column=0)
    return f


if __name__ == "__main__":
    root = tk.Tk()
    root.configure(bg="#7AFEC6")
    root.geometry('400x600')

    f1 = Notebook(root)
    ttk_f1 = ttkFrame(f1)
    root.mainloop()

Then put an entry or something element in ttk.Frame by grid(), that will be change ttk.Frame() size.

def use_entry(farme: ttk.Frame) -> None:
    entry = tk.Entry(farme, width=20)
    entry.insert(0, "Hello World")
    entry.grid(row=0, column=0)

if __name__ == "__main__":
    root = tk.Tk()
    root.configure(bg="#7AFEC6")
    root.geometry('400x600')

    f1 = Notebook(root)
    ttk_f1 = ttkFrame(f1)
    use_entry(ttk_f1)

    root.mainloop()

I know can use grid_rowconfigure(some args) and grid_columnconfigure(some args) to maintain size.

But I want to know why happend that?

0 Answers
Related