Tengo un script de Python que necesita calcular el tamaño exacto de las cadenas arbitrarias que se muestran en fuentes arbitrarias para generar diagramas simples. Puedo hacerlo fácilmente con Tkinter.¿Por qué el ancho y la altura calculados en píxeles de una cadena en Tkinter difieren entre las plataformas?
import Tkinter as tk
import tkFont
root = tk.Tk()
canvas = tk.Canvas(root, width=300, height=200)
canvas.pack()
(x,y) = (5,5)
text = "yellow world"
fonts = []
for (family,size) in [("times",12),("times",24)]:
font = tkFont.Font(family=family, size=size)
(w,h) = (font.measure(text),font.metrics("linespace"))
print "%s %s: (%s,%s)" % (family,size,w,h)
canvas.create_rectangle(x,y,x+w,y+h)
canvas.create_text(x,y,text=text,font=font,anchor=tk.NW)
fonts.append(font) # save object from garbage collecting
y += h+5
tk.mainloop()
Los resultados parecen depender de la versión de Python y/o el sistema:
Después de Ned Batchelder lo mencionó, he descubierto que el tamaño de las fuentes difiere de una plataforma a otra . Puede no ser un factor decisivo, siempre y cuando te quedes con Tkinter, que sigue siendo coherente consigo mismo. Pero mi complete program hace no usa para realizar el dibujo real: solo se basa en los cálculos del tamaño de fuente para generar una salida (en SVG o como una secuencia de comandos de Python que se enviará al Nodebox). Y es ahí donde las cosas van realmente mal:
Output of mocodo http://grab.by/grabs/f67b951d092dd1f4f490e1469a53bca2.png
(.. Por favor mira el image in real size Tenga en cuenta que la fuente principal que se utiliza para estas salidas no es Times, pero Trebuchet MS)
Ahora sospecho que tales discrepancias no se pueden evitar con Tkinter. ¿Qué otra solución multiplataforma recomendaría?
¿Tomó capturas de pantalla del texto en estas fuentes, y compararlos con los valores que está recibiendo? –
No veo qué tipo de solución de "plataforma cruzada" desea tener ... diferentes plataformas y hardware diferente usan varias resoluciones de fuente y algoritmos de representación de fuentes. No creo que puedas obtener una respuesta constante para todos ellos. –
Actualice las imágenes si puede, ya que ahora se han ido. – Nae