Les cadres en Tkinter, contenant local des systèmes de grille?

0

La question

Question très simple que je ne trouve pas de réponse sur la Pile d'Échange. Ce trompeuse fil: Python3 Tkinter: les Grilles Dans les Grilles? Images Avec D'Autres Cadres? qui, malheureusement, n'a pas répondu à la question).

J'utilise tkinter avec Python pour tenter un programme avec une interface graphique. Malheureusement, je ne comprends pas le système de grille.

J'étais sous l'impression que chaque image contient son propre système de grille, où 0,0) est le coin supérieur gauche de cette image.

J'ai créé ce code:

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)

Et espérer que parce que l'étiquette est fixée à (0,0) dans le cadre principal, que l'étiquette apparaît dans le cadre principal. Cependant, il n'a pas. Je trouve cela un peu étrange et bouleversant. Ci-dessous est une photo de ce qui est plutôt passe - l'en-tête de l'étiquette figurant dans la 'side_frame'.

Défectueux mise en page de l'image

Quelqu'un pourrait-il m'expliquer comment le système de réseau fonctionne? Je n'étais pas vraiment à avoir de la difficulté jusqu'à ce que j'ai essayé d'ajouter une barre de défilement à la main_frame - j'ai alors réalisé qu'il y a une grave maladresse intégré au sein de tkinter, et j'aimerais bien le comprendre.

Merci!

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

La meilleure réponse

1

Le problème, c'est que vous êtes réglage main_frame et side_frame pour None, donc passage qu'en tant que parent pour n'importe quel autre widget fera ce widget un enfant de la racine widget.

C'est parce que en python x=y().z() définit la valeur de x pour z(). Ainsi, lorsque vous ne main_frame = Frame(...).grid(...) jeux main_frame à la suite de .grid(...)et grid retourne toujours None.

Vous devez séparer widget de création de widget de mise en page, et c'est une des raisons pourquoi. L'autre grande raison est qu'il rend le code plus facile à lire et à visualiser.

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

Merci!!!! Je ne comprends pas tout les détails sur la façon dont cela est différent de les séparer, mais vous avez certainement résolu mon problème. Maintenant à attendre la prochaine question à surgir... :D
Jordan Regan

Dans d'autres langues

Cette page est dans d'autres langues

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