我正在创建一个使用.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)
我希望两个按钮在垂直方向上彼此相邻,像这样:
如果可能的话,我还能在画布旁边得到一整行这些按钮:
我在做错什么吗?可能吗?如果是这样,请告诉我并给我答案。 谢谢
答案 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()
我还为您的按钮使用了一个列表,但这只是向您演示其工作方式。您可能会不需要它。
答案 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)