由于您的GUI似乎有两个逻辑组的小部件,因此我会按照这种方式来组织它。首先将画布放在左侧,右侧放置一个画框。您可以使用pack
,place
,grid
或一个窗口窗口来管理它们。对于从左到右的方向,pack
是一个不错的选择,由于其简单
请注意,您不必这样做,但经验告诉我,它使布局问题更容易解决。
在下面的例子中,我设置expand
到False
为按钮帧,这意味着在画布将增长,并且当用户调整(因为它具有expand=True
)收缩,但按键只会占用完全一样多的空间他们需要。
canvas = Canvas(root, ...)
buttonframe = Frame(root, ...)
canvas.pack(side="left", fill="both", expand=True)
buttonframe.pack(side="right", fill="both", expand=False)
接下来,你可以把所有在右侧的按钮,而不必担心自己的位置会如何影响在左边的对象。
使用grid
时要记住的重要一点是,您应该至少指定一行和至少一列来给予任何额外的空间。这可以是包含小部件的行和/或列,也可以是边上的空行和列。
button1 = Button(buttonframe, ...)
button2 = Button(buttonframe, ...)
button3 = Button(buttonframe, ...)
...
button1.grid(row=0, column=0)
button2.grid(row=0, column=1)
button3.grid(row=1, column=0)
...
buttonframe.grid_rowconfigure(100, weight=1)
buttonframe.grid_columnconfigure(2, weight=1)
注意:如果你需要一个参考保持到窗口小部件,您必须创建控件和两个单独的行调用grid
(或pack
或place
)。这是因为Button(...).grid(...)
返回最后一个函数调用的值,并且grid(...)
返回None
对画布使用'grid(rowspan = ...)'或将'Frame'放在右列并将按钮放在此帧中。 – furas
顺便说一句:'var = Widgets()。grid()'因为'grid()'返回'None',所以将'None'赋给'var'。如果你需要变量,那么分两步进行:'var = Widget()'和'var.grid()'。 – furas
'grid(rowspan = ...)'解决了它,谢谢@furas – JMz