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)
- 746 megtekintés
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 hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
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()
- A hozzászóláshoz be kell jelentkezni
Köszi.
- A hozzászóláshoz be kell jelentkezni