Ho uno script Python che deve calcolare la dimensione esatta delle stringhe arbitrarie visualizzate in caratteri arbitrari per generare semplici diagrammi. Posso farlo facilmente con Tkinter.Perché la larghezza e l'altezza calcolate in pixel di una stringa in Tkinter differiscono tra le piattaforme?
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()
I risultati sembrano dipendere dalla versione di Python e/o il sistema:
Dopo Ned Batchelder accennato, ho scoperto che la dimensione dei caratteri è diversa da una piattaforma all'altra . Potrebbe non essere un rompicapo finché si rimane con Tkinter, che rimane coerente con se stesso. Ma il mio complete program non non utilizza Tkinter per eseguire il disegno reale: si basa solo sui calcoli della dimensione del carattere per generare un output (in SVG o come uno script Python da inviare a Nodebox). Ed è lì che le cose vanno davvero male:
Output of mocodo http://grab.by/grabs/f67b951d092dd1f4f490e1469a53bca2.png
(.. Si prega di guardare il image in real size Si noti che il carattere principale utilizzato per queste uscite non è Times, ma Trebuchet MS)
ora il sospetto che tali discrepanze non possono essere evitate con Tkinter. Quale altra soluzione multipiattaforma raccomanderesti?
Hai preso screenshot del testo in questi caratteri, e confrontarli con i valori che si stanno ottenendo? –
Non vedo che tipo di soluzione "multipiattaforma" desideri avere ... diverse piattaforme e diversi hardware utilizzano varie risoluzioni dei font e algoritmi di rendering dei font. Non penso che potresti avere una risposta costante per tutti loro. –
Si prega di aggiornare le immagini, se possibile, come sono andati ora. – Nae