web-dev-qa-db-fra.com

Définir la position sur un bouton en Python?

Je viens d'écrire un code qui crée une fenêtre (à l'aide de TKinter) et affiche un bouton de travail.

b = Button(master, text="get", width=10, command=callback)

Mais je voudrais avoir plusieurs boutons sous celui-ci.

Comment définissez-vous la ligne et la colonne du bouton? J'ai essayé d'ajouter row = 0, column = 0, mais cela ne fonctionnerait pas.

Merci

17
EatMyApples

astynax a raison. Pour suivre l'exemple que vous avez donné:

MyButton1 = Button(master, text="BUTTON1", width=10, command=callback)
MyButton1.grid(row=0, column=0)

MyButton2 = Button(master, text="BUTTON2", width=10, command=callback)
MyButton2.grid(row=1, column=0)

MyButton3 = Button(master, text="BUTTON3", width=10, command=callback)
MyButton3.grid(row=2, column=0)

Devrait créer 3 rangées de boutons. Utiliser la grille est beaucoup mieux que d'utiliser le pack. Cependant, si vous utilisez la grille sur un bouton et que vous emballez sur un autre, cela ne fonctionnera pas et vous obtiendrez une erreur.

16
Carto_

Pour faire apparaître un widget, vous devez le positionner en utilisant ce que Tkinter appelle des "gestionnaires de géométrie". Les trois gestionnaires sont grille , pack et place . Chacun a ses forces et ses faiblesses. Ces trois gestionnaires sont implémentés en tant que méthodes sur tous les widgets.

grid , comme son nom l'indique, est parfait pour placer des widgets dans une grille. Vous pouvez spécifier des lignes et des colonnes, des étendues de lignes et de colonnes, un remplissage, etc.

Exemple:

b = Button(...)
b.grid(row=2, column=3, columnspan=2)

pack utilise une métaphore de boîte, vous permettant de "pack" des widgets le long d'un des côtés d'un conteneur. le pack est extrêmement bon dans les dispositions tout verticales ou tout horizontales. Les barres d'outils, par exemple, où les widgets sont alignés sur une ligne horizontale, sont un bon endroit pour utiliser pack.

Exemple:

b = Button(...)
b.pack(side="top", fill='both', expand=True, padx=4, pady=4)`

place est le gestionnaire de géométrie le moins utilisé. Avec place, vous spécifiez l'emplacement exact x/y et la largeur/hauteur exacte pour un widget. Il a quelques fonctionnalités intéressantes telles que la possibilité d'utiliser des coordonnées absolues ou relatives (par exemple: vous pouvez placer un widget à 10,10, ou à 50% de la largeur ou de la hauteur des widgets).

Contrairement à grid et pack, l'utilisation de place n'entraîne pas l'expansion ou la réduction du widget parent pour s'adapter à tous les widgets placés à l'intérieur.

Exemple:

b = Button(...)
b.place(relx=.5, rely=.5, anchor="c")

Avec ces trois gestionnaires de géométrie, vous pouvez faire à peu près n'importe quel type de mise en page que vous pouvez imaginer.

47
Bryan Oakley

Essayez Grid Geometry Manager :

btns = [
    (lambda ctl: ctl.grid(row=r, column=c) or ctl)(
        Button(text=str(1 + r * 3 + c)))
    for c in (0,1,2) for r in (0,1,2)]

résultat:

[1][2][3]
[4][5][6]
[7][8][9]