Ich habe ein Python-Skript, das die genaue Größe beliebiger in willkürlichen Zeichensätzen angezeigter Zeichenketten berechnen muss, um einfache Diagramme zu erzeugen. Ich kann es einfach mit Tkinter machen.Warum unterscheiden sich die berechnete Breite und Höhe eines Zeichens in Tkinter in Pixel zwischen den Plattformen?
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()
Die Ergebnisse scheinen auf der Version von Python zu hängen und/oder das System:
Nachdem Ned Batchelder erwähnt, entdeckte ich, dass die Größe der Schriften von Plattform zu Plattform unterscheidet . Es kann kein Deal-Breaker sein, solange Sie bei Tkinter bleiben, der mit sich selbst konsistent bleibt. Aber meine tut nicht Verwenden Sie Tkinter, um die tatsächliche Zeichnung durchzuführen: es beruht nur auf seiner Schriftgröße Berechnungen, um eine Ausgabe (in SVG oder als Python-Skript an Nodebox gesendet werden) zu generieren. Und es ist dort, dass die Dinge gehen wirklich falsch:
Output of mocodo http://grab.by/grabs/f67b951d092dd1f4f490e1469a53bca2.png
(.. Bitte sehen Sie die image in real size Beachten Sie, dass die Haupt-Schriftart für diese Ausgänge verwendet wird, ist nicht Times, aber Trebuchet MS)
ich jetzt vermuten dass solche Diskrepanzen mit Tkinter nicht vermieden werden können. Welche andere plattformübergreifende Lösung würden Sie empfehlen?
Haben Sie Screenshots des Textes in diesen Schriftart nehmen, und vergleichen sie mit den Werten, die Sie bekommen? –
Ich sehe nicht, welche Art von "Cross-Plattform" -Lösung Sie haben möchten ... verschiedene Plattformen und unterschiedliche Hardware verwenden verschiedene Font-Auflösungen und Font-Rendering-Algorithmen. Ich glaube kaum, dass man für alle eine konstante Antwort bekommen könnte. –
Bitte aktualisieren Sie die Bilder, wenn Sie können, wie sie jetzt weg sind. – Nae