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