Je tente d'écrire une interface graphique à tkinter de base qui possède un widget code> de texte code> en haut, puis une touche code> code> widget est alignée en dessous, puis un autre Texte code> widget sous le bouton. Le problème que je vais avoir est, après avoir emballé le widget code> sur le widget sur la gauche, lorsque j'allume ensuite le second code> widget code>, il le pose à côté du bouton de le droit plutôt que sous le bouton. Cela se produit indépendamment de ce que je définis l'argument code> code> sur pour le deuxième texte code> widget Voici une simple pièce de code qui démontre ce comportement:
4 Réponses :
Emballage se produit dans l'ordre que les méthodes .Pack sont appelées, une fois X a «réclamé» le côté gauche, c'est tout - cela prendra la partie gauche de son parent et tout le reste au sein de son parent sera à son droit. Vous avez besoin d'un cadre pour "médiatiser", par exemple ...: (changements de textes sur des boutons pour une visibilité plus immédiate de la mise en page seulement - le tkinter sur ce Mac ne montre pas clairement les textes jusqu'à ce qu'ils se concentrent, mais les boutons sont assez clairs; -). P> p>
J'étais initialement mal compris la façon dont l'emballage a fonctionné et n'a pas compris que tout le côté gauche était "réclamé" quand j'ai fait de cette façon x.pack (côté = gauche) code>. Ce que j'ai trouvé après avoir lu Ceci et la réponse de Alex ici est que je n'étais pas vraiment après avoir
x code> emballé sur le côté gauche du tout, mais plutôt l'avoir ancrad fort> à gauche, en utilisant
anchor = w code> (W pour l'ouest) au lieu de
côté = gauche code>. Mon extrait de code révisé qui fait ce que j'avais après ressemble à ceci:
x code> ne "réclamer" pas le côté gauche, il vient d'alignement sur le gauche (ou ouest) dans son bloc d'espace. P> p>
Il y a généralement deux solutions aux problèmes de mise en page: P>
Basculez à l'aide de la grille. Cela devient vraiment facile de faire des mises en page comme ce que vous essayez d'accomplir. La grille peut résoudre probablement 95% de toutes les problèmes de mise en page (c'est incroyable lorsque vous y réfléchissez - TK, avec un gestionnaire, ce que la plupart des outils ont besoin d'une demi-douzaine pour accomplir!) P> LI>
Utilisez plusieurs cadres. Si certains widgets doivent être empilés de haut en bas et de gauche à droite, vous ne pouvez pas toujours obtenir ce que vous voulez tout emballer dans une seule image. Utilisez une image pour les parties de haut à bas de la disposition et des cadres supplémentaires pour le contenu de gauche à droite. P> LI> ol>
Réalisez également que les widgets ne doivent pas nécessairement être des enfants du widget dans lequel ils sont emballés / grillés. Vous pouvez utiliser le paramètre "dans" pour mettre les widgets dans un autre conteneur que leur parent. p>
Par exemple, dans votre exemple spécifique, vous pouvez créer trois cadres, dessus, milieu, fond. Packez ce haut de haut dans votre fenêtre de toplevel. Ensuite, vous pouvez emballer le premier widget de texte en haut, le bouton ou les boutons horizontalement au milieu et l'autre widget de texte en bas. p>
L'avantage d'une telle approche est qu'il est beaucoup plus facile de changer la mise en page à l'avenir (qui dans mon expérience toujours em> arrive à un moment donné). Vous n'avez pas besoin de la ré-mère de vos widgets, il suffit d'emballer / de placer / les griller dans un autre conteneur. p>
Dans votre court exemple, cela ne fait pas beaucoup de différence, mais pour les applications complexes, cette stratégie peut être un économiseur de vie. p>
Mon meilleur conseil est ceci: la mise en page n'est pas une réflexion après coup. Faites un peu de planification, peut-être même passer cinq minutes à dessiner sur du papier graphique. Commencez par décider des principales régions de votre application et utilisez un cadre ou un autre conteneur pour chacune (fenêtre vitrée, ordinateur portable, etc.). Une fois que vous avez celles-ci, faites la même approche de division et de conquérir pour chaque section. Cela vous permet d'utiliser différents types de mise en page pour différentes sections de votre application. Barres d'outils Obtenez une disposition horizontale, les formulaires peuvent obtenir une disposition verticale, etc. p>
Faites-le de la même manière que WebView utilise le widget de toile de mosaïque définit des internes (qui sont très similaires à TK). L'astuce est que le deuxième objet de cadre nommé identique fonctionne comme un niveau de niveau de bloc (Inline: Bloc;) Pour tout ce qui est placé après cela et tout ce qui appelle «FR» commencera automatiquement à l'intérieur de celui-ci.
Vous pouvez avoir beaucoup à faire cela des plus grands widgets alignés et simplement ajouter un autre cadre nommé identique où vous souhaitez casser entre le côté = gauche. Fonctionne après le bas aussi. P>
Le
avant code> argument de mots-clés de la méthode
pack () code> pourrait aider.