2016-10-17 92 views
2

我正在尝试使用tkinter在python中创建一些UI。Tkinter - 彼此相邻的网格元素

这是我使用的代码示例:

root = Tk() 
root.geometry("1000x700x0x0") 

canvas = Canvas(root, width = 700, height = 700, bg ='white').grid(row = 0, column = 0) 
button1 = Button(root, text = "w/e", command = w/e).grid(row = 0, column = 1) 
button2 = Button(root, text = "w/e", command = w/e).grid(row = 1, column = 1) 

这就是我得到:enter image description here

,这就是我想要的:enter image description here

任何帮助我该怎么办?

谢谢!

+1

对画布使用'grid(rowspan = ...)'或将'Frame'放在右列并将按钮放在此帧中。 – furas

+1

顺便说一句:'var = Widgets()。grid()'因为'grid()'返回'None',所以将'None'赋给'var'。如果你需要变量,那么分两步进行:'var = Widget()'和'var.grid()'。 – furas

+0

'grid(rowspan = ...)'解决了它,谢谢@furas – JMz

回答

3

由于您的GUI似乎有两个逻辑组的小部件,因此我会按照这种方式来组织它。首先将画布放在左侧,右侧放置一个画框。您可以使用packplace,grid或一个窗口窗口来管理它们。对于从左到右的方向,pack是一个不错的选择,由于其简单

请注意,您不必这样做,但经验告诉我,它使布局问题更容易解决。

在下面的例子中,我设置expandFalse为按钮帧,这意味着在画布将增长,并且当用户调整(因为它具有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(或packplace)。这是因为Button(...).grid(...)返回最后一个函数调用的值,并且grid(...)返回None

+1

谢谢你的答案布赖恩。每当有关于tkinter的问题时,你总是有一个答案! –