不,显式设置相对宽度仅在使用时可用place
。如果您在画布上创建对象,则由您自己进行数学运算来配置对象的宽度。
通过绑定到画布的事件来重新计算文本小部件的宽度相当简单<Configure>
,因为只要画布改变大小(以及其他原因),就会触发该事件。
这是一个将文本小部件放置在画布上的示例,并将其宽度保持在画布宽度的一半。运行代码,注意当您调整窗口大小时,文本小部件保持在画布宽度的 50%。
import tkinter as tk
class Example():
def __init__(self):
self.root = tk.Tk()
self.canvas = tk.Canvas(self.root, background="bisque")
self.canvas.pack(fill="both", expand=True)
self.text = tk.Text(self.canvas)
print("feh:", str(self.text))
self.canvas.create_window(10, 10, anchor="nw", window=self.text, tags=("text",))
self.canvas.bind("<Configure>", self._canvas_resize)
def _canvas_resize(self, event):
relwidth = event.width / 2
self.canvas.itemconfigure("text", width=relwidth)
e = Example()
tk.mainloop()