与this question类似,我不会问如何查找字符串中的字符数。我想确定一个字符串的可视长度,或者将它与另一个字符串进行比较。
例如,两者都是' iiii'和#WWWW'有四个字符。但是,' iiii'视觉上较短。我知道这是由字体决定的,而且我没有使用等宽字体。因此,出于这个问题的目的,我将使用Arial 10pt。
是否有任何内置模块可以提供给定字体的字符串的视觉尺寸?
答案 0 :(得分:2)
您可以使用字体指标直接通过计算宽度,而不是渲染到图像缓冲区和计算像素。似乎没有使用核心python分布的字体API,但有各种包装中有大量第三方产品。这是pretty complete solution的Adobe字体指标,使用matplotlib
:
>>> from matplotlib import rcParams
>>> import os.path
>>> afm_filename = os.path.join(rcParams['datapath'], 'fonts', 'afm', 'ptmr8a.afm')
>>>
>>> from matplotlib.afm import AFM
>>> afm = AFM(open(afm_filename))
>>> afm.string_width_height('What the heck?')
(6220.0, 694)
另一种可能性是tkFont
的{{1}}模块。 This page记录了函数tkinter
,但似乎您需要一个Tk窗口才能使用它;所以我不知道它有多实用:
tkFont.Font.measure("some string")
注意:在python 2中(以及我在上面提到的page中),# Python 3 names -- see Note below
import tkinter
from tkinter import font as tkFont
tkinter.Frame().destroy() # Enough to initialize resources
arial36b = tkFont.Font(family='Arial', size=36, weight='bold')
width = arial36b.measure("How wide is this?")
print(width) # Prints: 404
称为tkinter
,Tkinter
是顶层模块,{ {1}}:
tkinter.font