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()
。继续阅读