Установка позиции на кнопке в 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]