仅调整不适用于pack()

时间:2017-04-11 19:11:11

标签: python user-interface tkinter tkinter-canvas

我的目标是在启动时有一个提示,并根据输入的整数,让那些许多画布适合框架。框架必须具有固定的高度(画布也应如此),但宽度应根据窗户的大小而变化,并在画布中平均分配。

这适用于最多4幅画布,之后画布也不适合最大窗口。

另外,为什么我无法在画布上方和下方看到20像素的空灰框,因为画布的高度小于画框的高度?

from tkinter import *
from tkinter import simpledialog

b=[]
root = Tk()
no_of_players=simpledialog.askinteger(prompt="Enter here", title="No of participants")

status_frame=Frame(root, bg='gray', height=100)
status_frame.pack(fill=X)
for i in range(no_of_players):
    c=Canvas(status_frame,  bg="orange")
    b.append(c)
    b[i].pack(side=LEFT,fill=X, expand=True)
root.mainloop()

修改

from tkinter import *
from tkinter import simpledialog

b=[]
root = Tk()
no_of_players=simpledialog.askinteger(prompt="Enter here", title="No of participants")

status_frame=Frame(root, bg='gray', height=500)
status_frame.pack(fill=X)
for i in range(no_of_players):
    c=Canvas(status_frame, width=1, height=100, bg="orange")
    b.append(c)
    b[i].pack(side=LEFT,fill=X, expand=True)
root.mainloop()

1 个答案:

答案 0 :(得分:2)

画布的默认尺寸是他们尝试的。由于窗口和框架将尝试增大或缩小以适应其所有子项,因此当默认宽度乘以画布数量超过窗口大小时,主窗口会增长。

解决方案非常简单:给画布一个小的最小宽度,然后给主窗口一个首选的尺寸,并让画布扩展以填充该区域。

例如:

...
root.geometry("400x100")
...
for i in range(no_of_players):
    c=Canvas(..., width=1)
    ...
...

至于为什么你没有看到上方和下方的空间,因为pack的默认值是side='top',所以它会试图坚持它放在空间的顶部。

如果您想要上方和下方的空间,请使用pady,例如:

status_frame.pack(fill=x, pady=20)