如何使多个文本小部件展开以填充Tkinter中的框架

2024-10-01 13:39:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的代码

    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,但由于某些原因,它们正在扩展以填充整个框架。有人知道为什么会这样吗


Tags: 代码textselfplacerootcoordswidthleft
2条回答

您可以尝试对文本小部件使用以下属性

width-The width of the widget in characters (not pixels!), measured according to the current font size.

如果使用这种方法,则必须进行一些硬编码才能获得正确的宽度

    tk.Text(frame,width=100).pack(side=tk.LEFT)

此后,我在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。这很方便,因为它允许您以像素而不是文本单位来处理文本框大小,并且如果调整边界框的大小,文本框也会自动调整大小

相关问题 更多 >