【问题标题】:Finding The Current Size Of A tkinter.Text Widget查找 tkinter.Text 小部件的当前大小
【发布时间】:2012-04-23 21:24:47
【问题描述】:

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

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

【问题讨论】:

  • 您可以将文本小部件打包在一个框架中并获取框架的大小...
  • 这只是给你像素大小。
  • 对不起,我没有仔细阅读您的帖子。我以为你想要像素大小。我的错。
  • “在调整大小时刷新显示的文本”为什么要这样做?
  • 这样玩家可以调整他的游戏大小。

标签: python python-3.x tkinter


【解决方案1】:

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

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

【讨论】:

  • tkinter 变量名可以用字符串替换。使用时更方便:import tkinter as tk 而不是from tkinter import *
  • 我在这里写一个游戏,基本上使用文本作为诅咒的替代品。我不担心条目。
【解决方案2】:

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

【讨论】:

  • 非常感谢!虽然这会涉及一些额外的代码,但 Python 的美妙之处在于它的简单性,并且这将起作用(最重要的部分:)
【解决方案3】:

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

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

由于Text 小部件以字符形式存储其高度和宽度配置,因此只需查询这些参数即可获得所需的内容。

【讨论】:

  • 这仅返回配置的大小,不一定返回实际大小。它可能会更大或更小,具体取决于它添加到窗口的方式和窗口的大小。
猜你喜欢
  • 2013-06-11
  • 2011-04-26
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
相关资源
最近更新 更多