1

我正在尝试使用 Text 小部件创建一个 roguelike。

我已经弄清楚了一些事情,即我可以使用宽度和高度选项设置小部件的大小,并且我可以找到所述小部件的像素高度或宽度。但是,我想要做的是让小部件可调整大小(pack(expand="yes", fill="both")),但能够在调整大小时刷新显示的文本。有没有办法在小部件运行时获取字符尺寸,而无需使用 winfo_width() 和基于字符像素尺寸的数学?

4

3 回答 3

2

我已经遇到过同样的问题几次jaccarmac,据我所知,没有办法找到字符串的宽度。真正唯一的方法是使用 winfo_ 命令:宽度、高度、几何形状。但是,听起来您只是想确保在更改标签并添加更多文本时显示所有文本。如果是这种情况,您不必担心。这一切都应该由小部件本身来处理。如果您没有看到它们展开以显示您的所有标签,这通常意味着包含该标签的小部件之一未设置为展开(使用 expand=YES 和 .pack 或 columnconfigure(i, weight=1) for 。网格)。

最后的想法;在包参数中确保它是YES,而不是"yes"。那个大写的 YES 不是字符串,而是 Tkinter 定义的变量名。

于 2012-04-23T22:57:26.820 回答
0

没有办法自动获取字符的宽度,但很容易计算,假设您使用的是固定宽度的字体。一种方法是使用font_measure字体对象的方法。用于font_measure获取“0”的宽度(或任何其他字符;我认为 tk 用户在内部为零,与固定宽度字体无关),然后在计算中使用它。

于 2012-04-24T00:10:44.627 回答
0

这是一个老问题,但在做了一些研究之后,我发现实际上有一种方法可以直接获取高度/宽度信息,而无需数学或使用Text小部件的cget()方法来处理字体宽度:

text_widget = tk.Text()
width_in_char = text_widget.cget('width')
height_in_char = text_wdiget.cget('height')

由于Text小部件将其高度和宽度配置存储在字符中,因此只需查询这些参数即可为您提供所需的内容。

于 2018-01-12T02:34:41.873 回答