gpt4 book ai didi

python - Tkinter:如何设置 Canvas 中文本小部件的relwidth?

转载 作者:行者123 更新时间:2023-12-01 00:35:32 31 4
gpt4 key购买 nike

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

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

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

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

预先感谢您的帮助。

最佳答案

不,只有使用 place 时才可以显式设置相对宽度。 。如果您要在 Canvas 上创建对象,则需要您进行数学计算来配置对象的宽度。

通过绑定(bind)到 <Configure> 来重新计算文本小部件的宽度相当简单。 Canvas 的事件,因为只要 Canvas 大小发生变化(以及其他原因),该事件就会触发。

以下示例将文本小部件放置在 Canvas 上,并将其宽度保持为 Canvas 宽度的一半。运行代码,请注意,当您调整窗口大小时,文本小部件将保持 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()

关于python - Tkinter:如何设置 Canvas 中文本小部件的relwidth?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57808449/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com