Tkinter Frame, dinamikus mérettel

https://github.com/haa-zee/tkinter-tutorial/blob/master/2nd_ablak1.py

Van ez a csodás kis szkript.
Azt szeretném, hogy a Frame ne fix méretű legyen, hanem igazodjon a "root" ablak méretéhez.
Pár variációt kipróbáltam, de sehogy sem akar összejönni. A sticky összes verzióját beleértve. Valamit nagyon félreértek...
(a relief sem akar működni valamiért, de annak még nem jártam utána)

Hozzászólások

Szóval a kérdés, hogy hogyan tudnám elérni, hogy a "root"-hoz adott Frame osztájú objektum úgy jelenjen meg, hogy méretében igazodik a root méretéhez?

A

self.config()

-ban ne adj neki fix méretet, akkor felveszi a root méretét.

Továbbá szerintem nem így akarod használni a grid-et. Képzelj el pl. egy űrlapot, ahol a különféle mezőket rendeznéd egy rácsba. Erre jó a grid, pl. egy szövegmező felirata a (0,0), maga a szövegmező pedig az (1,0) rácspontba kerül.

Fix méret nélkül 1x1 pixel méretben jelenik meg.
A grid-et lehet, hogy félreértettem és a Frame-nek elég a pack() is, függetlenül attól, hogy a később belépakolandó elemek mit használnak?

szerk: ennek alapján működni látszik: https://bytes.com/topic/python/answers/474219-tkinter-fixed-size-frames
Szóval pack() és fill=BOTH, expand=Y...

szerk2: hát ha jól értem, akkor (ezt nem láttam egyértelműen leírva egyetlen tutorialban sem) az alap tkinter-ben van két layout manager, a grid és a pack. Hogy melyiket használom, az a widgeteken múlik, nem a konténeren. (úgy rémlik, Qt és java swing(?) esetében a konténerhez kell rendelni a layout managert, de nagyon rég volt, akár tévedhetek is)

A grid()-del is működik. Az alábbi kódban nincs a Frame-nek kezdő mérete, de a root-nak van "geometry" beállítva. A grid (0,0) cellája nyújtható (weight), és a Frame is minden irányba széthúzható (sticky).


import tkinter as tk

class MyApplication(tk.Frame):

    def __init__(self, root_window):
        super().__init__(root_window)
        self.config(background="orange")
   
def app_start():
    root = tk.Tk()
    root.geometry("800x600")
    root.rowconfigure(0,weight=1)
    root.columnconfigure(0,weight=1)
    app_object = MyApplication(root)
    app_object.grid(sticky=tk.N+tk.E+tk.S+tk.W)
    root.mainloop()

if __name__ == "__main__":
    app_start()