Tkinter:如何在 Canvas 中设置文本小部件的相对宽度?
Tkinter: How to set relwidth of a Text widget in a Canvas?
在 Tkinter 中,当您在主 window 中放置一个文本小部件时,您可以设置文本小部件的宽度与主 window 的宽度之间的关系:
text.place(x = 10, y = 10, relwidth = 0.5)
如果文本小部件的父 window 是 Canvas 小部件,是否可以执行相同的操作?我尝试使用 Canvas itemconfig()
方法,但它不起作用:
text = Text(canvas)
canvas.create_window(10, 10, anchor = NW, window = text)
canvas.itemconfig(text, relwidth = 0.5)
在此先感谢您的帮助。
不,明确设置相对宽度仅在使用 place
时可用。如果您在 canvas 上创建对象,则由您自行计算以配置对象的宽度。
通过绑定到 canvas 的 <Configure>
事件来重新计算文本小部件的宽度相当简单,因为只要 canvas 改变大小(以及其他原因)。
这是一个将文本小部件放置在 canvas 上并将其宽度保持为 canvas 宽度一半的示例。 运行 代码,请注意,当您调整 window 大小时,文本小部件保持在 canvas 宽度的 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()
在 Tkinter 中,当您在主 window 中放置一个文本小部件时,您可以设置文本小部件的宽度与主 window 的宽度之间的关系:
text.place(x = 10, y = 10, relwidth = 0.5)
如果文本小部件的父 window 是 Canvas 小部件,是否可以执行相同的操作?我尝试使用 Canvas itemconfig()
方法,但它不起作用:
text = Text(canvas)
canvas.create_window(10, 10, anchor = NW, window = text)
canvas.itemconfig(text, relwidth = 0.5)
在此先感谢您的帮助。
不,明确设置相对宽度仅在使用 place
时可用。如果您在 canvas 上创建对象,则由您自行计算以配置对象的宽度。
通过绑定到 canvas 的 <Configure>
事件来重新计算文本小部件的宽度相当简单,因为只要 canvas 改变大小(以及其他原因)。
这是一个将文本小部件放置在 canvas 上并将其宽度保持为 canvas 宽度一半的示例。 运行 代码,请注意,当您调整 window 大小时,文本小部件保持在 canvas 宽度的 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()