如何以像素为单位获取字符串的宽度?

11

我正在使用wxPython的HyperTreeList,我希望将列宽度设置为其中最长字符串的长度。

为了实现这一点,我想将python字符串大小转换为像素。

例如:如果我们有一个字符串

str = "python"
len(str) = 6

如何将上述字符串长度/大小转换为像素?

还有其他方法吗?


1
像素大小将取决于您用于显示字符串的字体和用于呈现字体的图形工具包。在我们能够帮助您之前,您需要提供更多信息。 - Daniel Stutzbach
1
我正在使用wxPython HyperTreeList,并且我想将列宽度设置为与列值长度完全相等。实际上,我想将列大小调整为列中最大字符串值的大小。 - MA1
3个回答

14

你需要做某事 类似于(请参阅wxWidgets的文档获取更多信息)

f = window.GetFont()
dc = wx.WindowDC(window)
dc.SetFont(f)
width, height = dc.GetTextExtent("Text to measure")

使用 GetColumnFont 获取正确的字体,使用 GetTextExtent 获取宽度。 - Anurag Uniyal

11

这取决于您如何打印文本。

您可能会对 PIL ImageDraw 感兴趣,它具有 textsize 方法。请参见http://effbot.org/imagingbook/imagedraw.htm

更新:这是回答原始问题的,随着问题的更新,它可能看起来有点离题。


1
请解释一下为什么要点踩。顺便说一下,原始答案并没有说明它是针对WxPython的。我应该删除这个答案吗? - luc
+1 对不起,我没有看到原始未编辑的问题,你的回答当时是有意义的。 - Anurag Uniyal

0

这不是我的解决方案,我只是将其传递下去,因为我发现它在程序环境中非常有用,可以缩减为仅3行。Python3.9 Mac OS

from tkinter import *
from tkinter import font as W1

FW=Tk() ; FW.withdraw() # a must but don't need a window
Text ='1234567890'

def LENGTH(Text) :
    W2 = W1.Font(family='Comicsans' , size = 20)
    length = W2.measure(Text)
    print(length)

LENGTH(Text)

这不是我打的,使它变得不太易懂。 - Ted
目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接