Udělat rámy v Tkinter obsahují místní grid systémy?

0

Otázka

Jednoduchá otázka, na kterou nemůžu najít odpověď na Stack Exchange. (Pouze tento zavádějící závitu: Python3 Tkinter: Mřížky Do Mřížky? Rámy Vedle Jiných Snímků? což bohužel není odpověď na otázku).

Já jsem s použitím tkinter s Python pokusit se o program s GUI. Bohužel, jsem úplně nechápou distribuční soustavy.

Měl jsem dojem, že každý snímek obsahuje vlastní grid systém, kde 0,0 je vlevo nahoře na rámu.

Vytvořil jsem tento kód:

root = Tk()

main_frame = Frame(root, width='1520', height='1080', bg='#a1a1a1').grid(row=0, column=1)
side_frame = Frame(root, width='400', height='1080', bg='#757575').grid(row=0, column=0)

header_label = Label(main_frame, text='Heading', font=('Agency', 48), bg='#a1a1a1', fg='#ffffff').grid(row=0, column=0)

A doufal, že, protože štítek je nastavena na (0,0) v hlavním rámu, štítku se objeví v hlavním rámu. Nicméně, to se nestalo. Zjistil jsem, že trochu zvláštní a zneklidňující. Níže je obrázek toho, co se místo toho děje - záhlaví štítku se objevuje v side_frame'.

Vadný rozvržení obrázku

Mohl by mi prosím někdo vysvětlit, jak ten grid systém funguje? Opravdu jsem neměla problémy, dokud jsem se snažil přidat posuvník main_frame - pak jsem si uvědomil, že tam je nějaké vážné rozpaky vložené do tkinter a rád bych, aby správně pochopit.

Díky!!!

layout optimization python tkinter
2021-11-21 20:36:50
1

Nejlepší odpověď

1

Problém je, že jste nastavení main_frame a side_frame k Nonetak mimochodem, že jako rodič pro jakýkoli jiný widget bude dělat, že widget dítě kořenového widgetu.

To je proto, že v pythonu x=y().z() nastaví hodnotu x k z(). Tak, když budeš dělat main_frame = Frame(...).grid(...) sady main_frame na výsledek .grid(...)a grid vždycky vrátí None.

Ty by měly samostatný widget vytvoření widgetu layout, a to je jeden z důvodů, proč. Další velký důvod je, že to dělá kód čitelnější a vizualizovat.

main_frame = Frame(root, width='1520', height='1080', bg='#a1a1a1')
side_frame = Frame(root, width='400', height='1080', bg='#757575')

main_frame.grid(row=0, column=1)
side_frame.grid(row=0, column=0)
2021-11-21 21:25:09

Děkuji!!! Nemám plně pochopit specifika o tom, jak je to odlišné od oddělovat je, ale rozhodně jste vyřešil můj problém. Teď čekat na další problém vzniknout... :D
Jordan Regan

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................