Установка позиции на кнопке в Python?

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

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

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

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

Спасибо

Ответ 1

астинакс прав. Чтобы следовать примеру, вы дали:

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 ряда кнопок. Использование сетки намного лучше, чем использование пакета. Однако, если вы используете сетку на одной кнопке и ставите на другую, она не будет работать, и вы получите сообщение об ошибке.

Ответ 2

Причиной появления виджета необходимо, чтобы вы позиционировали его, используя то, что Tkinter называет "менеджерами геометрии". Три менеджера: grid, pack и place. У каждого есть свои сильные и слабые стороны. Эти три менеджера реализованы как методы для всех виджетов.

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

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

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

Пример:

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

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

Ответ 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]