Я рекомендую , а не использовать grid
в этой ситуации.Вы можете легко получить то, что вы хотите, используя pack
.У вас явно есть два элемента верхнего уровня: холст справа и стопка кнопок слева.Итак, создайте рамку для кнопок, и они упаковывают их бок о бок:
button_frame = Frame(...)
canvas = Canvas(...)
button_frame.pack(side="left", fill="y")
canvas.pack(side="right", fill="both", expand=True)
Теперь вы можете создать кнопку в рамке и расположить их независимо от холста.Опять же, pack
- лучший выбор, поскольку он разработан специально для размещения виджетов сверху вниз и из стороны в сторону:
button1 = Button(button_frame, ...)
button2 = Button(button_frame, ...)
...
button1.pack(side="top", fill="x")
button2.pack(side="top", fill="x")
...
Если вы действительно хотите использовать grid
, тогда решение состоит в том, чтобы посчитать, сколько у вас кнопок, и иметь размер холста, равный числу строк:
canvas.grid(row=1, column=2, rowspan=12)