Tkinter:如何在画布中设置文本小部件的相对宽度?



在 Tkinter 中,当您在主窗口中放置文本构件时,您可以设置文本构件的宽度与主窗口宽度之间的关系:

text.place(x = 10, y = 10, relwidth = 0.5)

如果文本小部件的父窗口是画布小部件,是否可以执行相同的操作?我尝试使用 Canvasitemconfig()方法,但它不起作用:

text = Text(canvas)
canvas.create_window(10, 10, anchor = NW, window = text)
canvas.itemconfig(text, relwidth = 0.5)

提前感谢您的帮助。

不,显式设置相对宽度仅在使用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()

最新更新