Tkinter正确使用.grid()

时间:2018-12-12 17:41:38

标签: python tkinter

我正在创建一个使用.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 :(得分:1)

您可以在画布的rowspan方法中将grid参数设置为所需输出的按钮所需的行数(在您的情况下为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()

我还为您的按钮使用了一个列表,但这只是向您演示其工作方式。您可能会不需要它。

enter image description here

答案 1 :(得分:1)

我建议在这种情况下不要使用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)