2012-10-25 53 views
5

我想填充我的窗口,例如标签,我希望它们在列的大小超过当前窗口(或者说父框架)大小时进行换行。如何在TkInter中创建平铺布局/流布局?

我试过使用grid布局,但是接下来我必须自己计算每一行内容的大小,以知道何时将下一个元素放入下一行。

我问的原因是因为我想创建某种平铺文件图标。

或者换个问题,有没有像TkInter的Swing的FlowLayout

回答

7

当我想要这样的东西时,我所做的就是使用容器的文本小部件。文本小部件可以嵌入小部件,它们就像文本一样包装。只要你的小部件高度相同,效果相当不错。

例如(切割和作者的请求,从问题粘贴):

textwidget = tk.Text(master) 
textwidget.pack(side=tk.LEFT, fill=tk.BOTH) 
for f in os.listdir('/tmp'): 
    textwidget.window_create(tk.INSERT, window=tk.Label(textwidget, text=f)) 
+0

太好了!谢谢。请在我的答案中插入我提供的代码示例,以便下一个查找此人的人不必查找文本部件上的文档:) – devsnd

+0

用户仍然可以使用“文本”作为文本框,并键入文字或删除项目与退格等,这是最有可能不希望将其用作GUI管理器。你可以用'textwidget.config(state = tk.DISABLED)'来禁止编辑。即使如此,用户可以选择文本/空白空间,并且光标看起来像文本光标。这两件事情最终也可以用下面的代码来解决,它将背景选择颜色设置为文本框的常规背景颜色,并将光标变成箭头。 'textwidget.config(selectbackground = textwidget.cget('background'),cursor ='arrow')' – nitro2k01

+0

@ nitro2k01:可以说更简单的解决方案是简单地添加禁用选择的键绑定。另外,当禁用小部件时,将不存在插入光标,因此不需要更改它。 –