首页 > 解决方案 > 如何使多个文本小部件扩展以填充 Tkinter 中的框架

问题描述

我有看起来像这样的代码

    frame = tk.Frame(self.root.canvas)
    frame.place(x = coords.x, y = coords.y, width = frameWidth*3, height = frameHeight)
    tk.Text(frame).pack(side=tk.LEFT)
    tk.Text(frame).pack(side=tk.LEFT)
    tk.Text(frame).pack(side=tk.LEFT)

我希望每个文本框都具有宽度 frameWidth,但由于某种原因,它们正在扩展以填充整个框架。有谁知道为什么会这样?

标签: pythontkinter

解决方案


从那以后,我想出了一个在 tkinter 中动态文本框大小的解决方案。你需要做的是用一个框架包裹每个文本小部件,并将框架的pack_propagate(或grid_propagate)设置为0;然后,文本框将扩展填充框架,并具有与框架相同的动态大小。

例子:

frame = tk.Frame(root)
for textBox in boxes:
        textWrap = tk.Frame(frame)
        textWrap.pack_propagate(0)
        textWrap.pack(expand = True, fill = tk.BOTH)
        textBox = tk.Text(textWrap)

frame.place(x = coords.x, y = coords.y, width = width, height = height) 

因为默认的包装面是顶部,这将创建三个垂直堆叠的宽度为 frame.width 和高度为 frame.height/3 的文本框。这很方便,因为它允许您以像素而不是文本单位来处理文本框的大小,并且如果调整边界框的大小,文本框也会自动调整大小。


推荐阅读