vielleicht so (eigene Zeichen, z.B. alpha, kann man auf karierten Papier entwerfen
oder bei einem Nadell-Drucker o.ä. mit Lupe bewaffnet abgucken):
Code: Alles auswählen
# schrg.py Pixel-Schrift fuer Grafik-Bildschirm
# Demo Pixelgrafik, Canvas
#
# wn NOV2008 --------------------------------------------------|
import Tkinter as tk
# Bildgroesse, VGA maximale Pixel in Y und X -Richtung
YYMX = 480
YXMX = 640
# Codierter ASCII-Code-Bereich
YAIA = 32
YAIE = 90
# Schriftfont nach Art Grafik-Nadel-Druck: pro Spalte eine Zahl zwischen
# 0 und 127 fuer 7 Nadeln=Punkte uebereinander.
# Zeichen im 5*7-Raster, also pro Zeichen 5 Zahlen.
# Speicherung nach dem ASCII-Code fuer alle Zeichen im Bereich 32..90
# des ASCII-Codes
# fuer praktische Anwendung sollte eine Klasse gebildet werden und
# Schriftfarbe wie die Bildgroesse variabel sein, Zeichenanzahl erweitern,
# groessere Schrift: Rechtecke anstelle Punkte setzen
schrf = (
0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 3, 3, 0, 3, 3, 20,127,20,127,20,
36,42,127,42,18, 35,19, 8,100,98, 54,73,86,32, 80, 0, 11, 7, 0, 0,
0, 0, 62, 65, 0, 0 ,65, 62, 0, 0, 8,42, 28, 42, 8, 8, 8, 62, 8, 8,
0, 88,56, 0, 0, 8, 8, 8, 8, 8, 0, 96,96, 0, 0, 32, 16, 8, 4, 2,
62, 81,73,69,62, 0, 66,127,64, 0, 98, 81,73,73,70, 34, 65,73,73,54,
24,20,18,127,16, 39, 69,69,69,57, 60, 74,73,73,48, 1,113, 9, 5, 3,
54, 73,73,73,54, 6, 73,73,41, 30, 0, 54,54, 0, 0, 0, 91,59, 0, 0,
0, 8,20,34, 65, 20, 20,20,20,20, 65, 34,20, 8, 0, 2, 1,81, 9, 6,
62, 65,93,85,30, 126,9,9, 9, 126, 127,73,73,73,54, 62,65,65,65, 34,
127,65,65,65,62, 127,73,73,73,65, 127, 9, 9, 9, 1, 62,65,65,81,114,
127, 8, 8,8,127, 0,65,127,65, 0, 32,64,64,64, 63, 127, 8,20,34,65,
127,64,64,64,64, 127, 2,12,2,127, 127, 4,8,16,127, 62,65,65,65, 62,
127, 9, 9, 9, 6, 62,65,81,33, 94, 127, 9,25,41,70, 38,73,73,73, 50,
1, 1,127, 1, 1, 63,64,64,64, 63, 7,24,96, 24, 7, 127,32,16,32,127,
99,20, 8, 20,99, 3, 4,120, 4, 3, 97,81,73, 69,67)
# Zeile Zeichen ASCCI-CODE
# 1 Leerz bis # 32 bis 35
# 2 $ ' 36 39
# 3 ( + 40 43
# 4 , / 44 47
# 5 0 3 48 51
# 6 4 7 52 55
# 7 8 ; 56 59
# 8 < ? 60 63
# 9 @ C 64 67
# 10 D G 68 71
# 11 H K 72 75
# 12 L O 76 79
# 13 P S 80 83
# 14 T W 84 87
# 15 X Z 88 90
def schrkw(schrp, schrx, schry ):
# Parameter: schriftp.- eine Zeichenkette aus Zeichen
# im Bereich YAIA...YAIE, die ausgegeben werden soll
# schrx, schry Schrift-Beginn-Koordinaten x und y
# Schriftgroesse: Minimal, 1 Pixel pro Nadelpunkt (k)leinste
# Schriftrichtung: nur (w)aagerecht
# Rueckgabewert rueck
# Fehlermeldung: 0 - in Ordnung
# (grob) 1 - Parameter falsch -> Ersatzloesung
# 2 - Parameter nicht ausfuehrbar -> Abbruch
rueck=0; lang=0; i=0; k=0; k1=0; # (das war mal C-Code)
zch=0; zchs=0; # Zeichen, Zeichenspalte
if(schrx < 0 or schrx > YXMX or schry < 0 or schry > YYMX):
return 2
# gegen falsche Koordinaten grobe Sicherung, YXMX,YXMX ggf. anpassen
# ............................................ABBRUCH ..............
lang = len(schrp);
for i in range(-1, 8*lang +1): # Alle Pixel bg Schrift hellgrau
for k in range(-1, 8,):
b.put('#ddd',(schrx+i, schry+k))
for i in range(lang): # ueber alle Zeichen im String schrp
zch = ord(schrp[i]);
if(zch < 32 or zch > 90):
zch = 46; rueck = 1;
for k in range(5): # 5 Spalten / Zeichen
zchs = schrf[(zch - 32) * 5 + k ]
for ko in range(7): # 7 Nadeln / Spalte
if zchs % 2:
b.put('#000',(schrx+8*i+k,schry+ko))
zchs = zchs/2 # naechster Nadelpunkt
return rueck
# -------------------------------------------------------------------
fr=tk.Tk()
b=tk.PhotoImage(width=139,height=99)
l=tk.Label(fr,image=b)
b.put('#aa0000',(30,10,80,80))
b.put('#00aa00',(13,23,85,33))
schrkw('SO SIEHT ES AUS',11,11)
# 2 Rechtecke und Schrift auf b in l
c=tk.Canvas(fr,width=138,height=38)
c.pack()
l.pack()
c.create_oval(3,3,86,36,fill='#333388')
# ein Oval oben rechts auf c
fr.mainloop()