Установка позиции для кнопки в Python?

Я только что написал код, который создает окно (используя TKinter) и отображает одну рабочую кнопку.

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

Но я хотел бы иметь несколько кнопок под этой.

Как установить строку и столбец кнопки? Я пытался добавитьrow = 0, column = 0, но это не сработает.

Спасибо

Ответы на вопрос(3)

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)]

результат:

[1][2][3]
[4][5][6]
[7][8][9]
 07 июн. 2012 г., 22:00
-1 Ваш код создает экземпляры кнопок, но ваша переменнаяbtns это список None ...
 08 июн. 2012 г., 03:09
@FabienAndre, исправлено! Спасибо за комментарий!

чтобы вы поместили его с помощью того, что Tkinter называет «менеджерами геометрии». Три менеджерасетка, пак а такжеместо, У каждого есть свои сильные и слабые стороны. Эти три менеджера реализованы как методы для всех виджетов.

gridКак следует из названия, идеально подходит для размещения виджетов в сетке. Вы можете указать строки и столбцы, диапазоны строк и столбцов, отступы и т. Д.

Пример:

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

pack использует блочную метафору, позволяющую вам «упаковать» виджеты вдоль одной из сторон контейнера. Пакет очень хорош при полностью вертикальной или горизонтальной компоновке. Например, панели инструментов, где виджеты выровнены по горизонтали, являются хорошим местом для использования пакета.

Пример:

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

place наименее используемый менеджер геометрии. С помощью place вы указываете точное положение x / y и ширину / высоту виджета. У него есть несколько приятных функций, таких как возможность использовать абсолютные или относительные координаты (например: вы можете разместить виджет на 10,10 или на 50% ширины или высоты виджетов).

В отличие отgrid а такжеpack, с помощьюplace не заставляет родительский виджет расширяться или сворачиваться, чтобы соответствовать всем виджетам, которые были размещены внутри.

Пример:

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

С этими тремя менеджерами геометрии вы можете создать практически любой тип макета, который только можете себе представить.

 06 дек. 2018 г., 12:08
Хорошо объяснил! Но как я могу использовать их все вместе?
 EatMyApples12 июн. 2012 г., 02:35
Вот Это Да! Благодарю. очень полезно
Решение Вопроса

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)

Нужно создать 3 ряда кнопок. Использование сетки намного лучше, чем использование пакета. Однако, если вы используете grid на одной кнопке, а pack на другой, она не будет работать, и вы получите ошибку.

 07 июн. 2012 г., 20:28
Я рекомендую не отдавать предпочтение одному над другим - изучите сильные стороны каждого и используйте правильный инструмент для работы. Пакет удивительно мощный и простой для определенного класса задач макета, как и сетка. Каждый из них может легче решить некоторые проблемы, чем другие.

Ваш ответ на вопрос