Mise en page de tkinter gui en utilisant des cadres et une grille
ressemble presque rien comme ce que j'attends
je suppose qu'il y a quelques éléments que je ne comprends pas.
Je suppose que les images contiennent leur propre "de la grille de l'espace" (ligne, colonne), mais le comportement, je vois ne pas supporter ça, et je suis à une perte pour tout travail de la manière que je veux pour le haut du cadre. Mes étiquettes sont censés être sur la même ligne L à R, en vertu d'une 'étiquette d'image" qui s'étend sur la totalité de l'image - à l'exception qu'ils ne le font pas. Je veux le réel ressemble plus à de l'objectif jpg, et je veux utiliser la grille pour le faire.
Vous pouvez voir l'un des champs de saisie à droite du cadre vert. Pourquoi est-ce que ça va ?
from Tkinter import *
root = Tk()
root.title('Model Definition')
root.resizable(width=FALSE, height=FALSE)
root.geometry('{}x{}'.format(460, 350))
top_frame = Frame(root, bg='cyan', width = 450, height=50, pady=3).grid(row=0, columnspan=3)
Label(top_frame, text = 'Model Dimensions').grid(row = 0, columnspan = 3)
Label(top_frame, text = 'Width:').grid(row = 1, column = 0)
Label(top_frame, text = 'Length:').grid(row = 1, column = 2)
entry_W = Entry(top_frame).grid(row = 1, column = 1)
entry_L = Entry(top_frame).grid(row = 1, column = 3)
#Label(top_frame, text = '').grid(row = 2, column = 2)
center = Frame(root, bg='gray2', width=50, height=40, padx=3, pady=3).grid(row=1, columnspan=3)
ctr_left = Frame(center, bg='blue', width=100, height=190).grid(column = 0, row = 1, rowspan = 2)
ctr_mid = Frame(center, bg='yellow', width=250, height=190, padx=3, pady=3).grid(column = 1, row=1, rowspan=2)
ctr_right = Frame(center, bg='green', width=100, height=190, padx=3, pady=3).grid(column = 2, row=1, rowspan=2)
btm_frame = Frame(root, bg='white', width = 450, height = 45, pady=3).grid(row = 3, columnspan = 3)
btm_frame2 = Frame(root, bg='lavender', width = 450, height = 60, pady=3).grid(row = 4, columnspan = 3)
root.mainloop()
Donc, précisément, où sont mes étiquettes et l'Entrée des widgets, et comment dois-je faire ressembler davantage à l'objectif (cadre du haut, le reste pour plus tard).
source d'informationauteur shawn
Vous devez vous connecter pour publier un commentaire.
Que c'est la bonne hypothèse.
Le problème commence ici:
En python,
x = y().z()
sera toujours la valeurx
à la suite de.z()
. Dans le cas detop_frame = Frame(...).grid(...)
grid(...)
retourne toujoursNone
donctop_frame
seraNone
. Qui provoque chaque widget que vous pensez est en cours dans le cadre du haut pour aller dans la fenêtre racine.Présentation De La Solution
Comme une règle générale, vous devriez jamais appel
grid
pack
ouplace
dans le cadre de la même instruction qui crée le widget. Partiellement c'est pour ce comportement exact que vous êtes en train de vivre, mais aussi parce que je pense que cela rend votre code plus difficile à écrire et plus difficile à maintenir dans le temps.Création de widgets et de disposition widget sont deux choses différentes. Dans mon expérience, les problèmes de mise en page sont considérablement plus facile à déboguer lorsque vous groupez votre disposition commandes.
Aussi, vous devez être cohérent lors de l'utilisation de la grille et de toujours mettre les options dans le même ordre, de sorte que vous pouvez plus facilement visualiser la mise en page. Et enfin, lors de l'utilisation de
grid
vous devriez prendre l'habitude de toujours spécifier lesticky
option, et de toujours donner une ligne et une colonne dans chaque contenant de l'image d'un non-poids à zéro.Exemple De Solution
Voici comment j'aurais pu écrire votre code. C'est beaucoup plus long, mais beaucoup plus facile à comprendre.
Résultat:
variable = Widget(...).grid()
attribueNone
de variables, car lesgrid()
/pack()
/place()
retourNone
utilisation