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

Python 如何使多个文本小部件展开以填充Tkinter中的框架,python,tkinter,Python,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)

我有这样的代码

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

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

宽度以字符(不是像素!)为单位测量的小部件宽度 根据当前字体大小

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

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

您不必猜测硬编码的宽度,还有其他解决方案。如文所述,这个答案是误导性的,因为它给人的印象是这是唯一的解决方案。@Bryan Oakley如果我的答案看起来像是误导性的,我很抱歉。我改变了措辞,以使它更清楚,并且我已经根据OP的细节给出了我能想到的最好的方法。如果你能添加一个更好的答案,我将不胜感激回答问题,因为这将有助于我和OP学习新知识。不建议在画布内的小部件上使用
pack()/grid()/place()
。使用画布。改为创建窗口()。另外,请尝试在
文本
小部件上使用
place()
,而不是
pack()
。继续阅读