Tkinter Grid: Comment positionner les widgets pour qu'ils ne soient pas collés ensemble
Je suis en train de créer l'Étiquette de deux widgets qui sont en haut à gauche et en haut à droite de mon test de l'INTERFACE utilisateur. Le problème est que les widgets sont collés ensemble et j'aimerais y avoir un espace entre eux.
Dans mes recherches, je suis tombé sur des suggestions pour utiliser le collant, padx, et pady options. Mais pas n'importe quels arguments je passe pour .grid() , je ne peux pas semblent être en mesure de créer de l'espace entre mes widgets. Je comprends que, quel que soit le nombre de colonnes et de lignes entre deux widgets, si les lignes/colonnes sont vides, alors c'est comme si elles n'existaient pas et les widgets apparaissent collées ensemble.
À l'aide de l' .grille() la méthode, comment puis-je placer des widgets, de sorte qu'ils ne sont pas collés ensemble?
Voici mon code pour l'instant:
#!/usr/bin/python
from Tkinter import *
class MyApp:
def __init__(self, parent):
self.myParent = parent
self.main_container = Frame(parent)
self.main_container.grid(row=0, rowspan=2, column=0, columnspan=4)
self.top_frame = Frame(self.main_container)
self.top_frame.grid(row=0, column=0, columnspan=4)
self.top_left = Frame(self.top_frame)
self.top_left.grid(row=0, column=0, columnspan=2)
self.top_right = Frame(self.top_frame)
self.top_right.grid(row=0, column=2, columnspan=2)
self.bottom_frame = Frame(self.main_container)
self.bottom_frame.grid(row=2, column=0, columnspan=4)
self.top_left_label = Label(self.top_left, text="Top Left")
self.top_left_label.grid(row=0, column=0, sticky='W', padx=2, pady=2)
self.top_right_label = Label(self.top_right, text="Top Right")
self.top_right_label.grid(row=0, column=4, sticky='E', padx=2, pady=2)
self.text_box = Text(self.bottom_frame, height=5, width=40)
self.text_box.grid(row=0, column=0)
root = Tk()
root.title("Test UI")
myapp = MyApp(root)
root.mainloop()
~~Mise à jour~~
J'ai essayé ce qui suit, mais cela n'a pas fonctionné:
self.top_left = Frame(self.top_frame)
self.top_left.grid(row=0, column=0, columnspan=2)
for c in range(2):
self.top_left.columnconfigure(c, weight=2)
self.top_right = Frame(self.top_frame)
self.top_right.grid(row=0, column=2, columnspan=2)
for c in range(2):
self.top_right.columnconfigure(c, weight=2)
source d'informationauteur Dirty Penguin
Vous devez vous connecter pour publier un commentaire.
Si vous ajoutez
bg = "red"
à la foistop_left
ettop_right
constructeurs, vous verrez comment leFrames
sont coincés sur la le centre, même à l'aide de lasticky
option. Si ils ne vont pas contenir autre chose qu'à un seul widget, je recommande de ne pas les utiliser.Ici est un moyen facile de le faire:
propriété de disposition, dans la combinaison des propriétés collante
columnspan ou rowspan vous permettent d'affecter plus d'une cellule de la grille à un composant d'interface graphique, et collant bien laissez-vous la force que l'élément en tenir à un seul côté(s) et de laisser un espace vide sur l'autre côté(s)
Mieux vaut tard que jamais 😉
Tkinter "grille" veut tout mettre ensemble. C'est pourquoi vous n'êtes pas en mesure d'ignorer les cellules. Vous devez spécifier les largeurs et puis ancre le texte. J'ai ajouté de la couleur à montrer des cellules. J'ai mis le cd dans le cadre. Ensuite, j'ai dû donner la largeur de l'cellules à gauche et à droite afin de grille de donner plus de poids à eux. Ensuite, le texte d'ancrage à l'Ouest ou à l'Est. Je ne sais pas pourquoi, j'ai dû ajouter un supplément de 2 places pour chaque cellule, mais j'ai pensé que c'était une police en question.
Je crois Rodas est plus propre et plus simple, mais j'ai essayé de rester à l'intérieur des paramètres que vous parlez.
Pack est plus facile et plus rapide pour les petites choses.
Si vous avez besoin d'avoir le plein contrôle sur le placement de votre composant d'interface graphique, essayez de lieu de mise en page; très maniable approche consiste à organiser vos composants dans plusieurs image, chacune avec grille ou le pack de mise en page, puis l'organisation de toutes ces images à l'aide du lieu de mise en page.