2017-04-11 44 views
0

我的目标是在启动时有一个提示,并根据输入的整数,将许多画布放在框中。框架必须有一个固定的高度(Canvases也是如此),但宽度应根据窗口的大小而变化,并在画布中平均分配。仅调整不适合使用包的画布宽度()

这适用于最多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

我不明白你的问题。你不会设置画布宽度,所以它默认为某些东西(我的机器上是378像素)。你认为它没有做什么? – Novel

+0

@Jonathan在第二个[asnwer]中建议的东西就像这样(http://stackoverflow.com/questions/22835289/how-to-get-tkinter-canvas-to-dynamically- resize-to-window-width)。我基本上希望画布的数量能够在X方向上完全填充框架,即基于画布的数量,即使在调整窗口大小时也应该在它们之间划分可用的框架宽度。 –

+1

我建议你暂时给'status_frame'一个独特的颜色,以便你能看到它的边缘在哪里。我的猜测是,他们不在你认为的地方。 –

回答

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) 
+0

这完美地解决了第一个问题。对于第二个:但我确实指定了'side = LEFT'。而且,即使是顶层,如果画布的高度低于它所设置的框架的高度,默认情况下不应该有空白区域? –

+0

@SatwikPasani:是的,你为画布指定了'side = LEFT'。我不确定你在做什么。 'side = LEFT'绝对是你在这个特定情况下应该做的。如果画布比窗户小,那么下面会有空白区域,但不会在上面。同样,你指定了“TOP”,所以它被置于顶端。 –

+0

如果我不清楚,我很抱歉。当框架的高度设置为500,画布的高度设置为150时,在包装画布时side = LEFT,应该留下一些空框架。我无法看到它。我是否应该发布其他内容来澄清问题?问题中的编辑。 –