1

在 Tkinter 中,当您在主窗口中放置一个 Text 小部件时,您可以设置 Text 小部件的宽度和主窗口宽度之间的关系:

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

如果 Text 小部件的父窗口是 Canvas 小部件,是否可以这样做?我尝试使用 Canvasitemconfig()方法,但它不起作用:

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

在此先感谢您的帮助。

4

1 回答 1

2

不,显式设置相对宽度仅在使用时可用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()
于 2019-09-05T15:20:21.167 回答