Ткинтер правильно использует .grid () - PullRequest
0 голосов
/ 12 декабря 2018

Я создаю программу, которая использует .grid (), и у меня возникают проблемы с размещением двух кнопок рядом друг с другом (по вертикали).Вот мой код:

canvas = Canvas(root, width=500, height=400, bg='green')
canvas.grid(row=1, column=2)

button1 = Button(root, text="Build Road")
button1.grid(row=1, column=0)
button2 = Button(root, text="Build Road")
button2.grid(row=2, column=0)

и вот вывод: num

Я хочу, чтобы две кнопки были расположены вертикально рядом друг с другом, например:

num

А также, если возможно, могу ли я получить полную строку этих кнопок рядом с холстом, например:

enter image description here

Что-то я не так делаю?Является ли это возможным?Если это так, пожалуйста, скажите мне и дайте мне ответ.Спасибо

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Я рекомендую , а не использовать 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)
0 голосов
/ 12 декабря 2018

Вы можете установить параметр rowspan в методе grid canvas как количество строк, необходимое для кнопки нужного вывода (12 в вашем случае):

from tkinter import *

buttons = []

root = Tk()
canvas = Canvas(root, width=500, height=400, bg='green')
canvas.grid(row=1, rowspan=12, column=2) # Set the rowspan parameter

for i in range(1,13,1):
    button = Button(root, text="Build Road")
    button.grid(row=i, column=0)
    buttons.append(button)

root.mainloop()

Iтакже использовал список для ваших кнопок, но это просто, чтобы продемонстрировать вам, как это работает.Вероятно, вам это не понадобится.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...