1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
#! /usr/bin/env python
"""Demonstration of using t1lib with Tkinter."""
import ImageTk
import t1lib
import t1Imaging
import Tkinter
class DemoDisplay(Tkinter.Toplevel):
def __init__(self, master):
Tkinter.Toplevel.__init__(self, master)
self.title("Display Window")
self.label = Tkinter.Label(self, text="Display Window",
borderwidth=0)
self.label.pack()
self.protocol("WM_DELETE_WINDOW", master.quit)
def setGlyph(self, glyph):
self.photo = ImageTk.PhotoImage(glyph)
self.glyph = glyph
self.label["image"] = self.photo
def destroy(self):
Tkinter.Toplevel.destroy(self)
self.label = None
self.photo = None
class DemoDialog(Tkinter.Toplevel):
"""A bunch of controls that affect a display window."""
def __init__(self, master, display):
Tkinter.Toplevel.__init__(self, master)
self.title("Display Controls")
self.display = display
self.__setters = {}
self.create_widgets()
self.protocol("WM_DELETE_WINDOW", master.quit)
def create_widgets(self):
self.__labels = []
# create selection box for font:
import _t1lib
map(_t1lib.LoadFont, range(_t1lib.Get_no_fonts()))
names = tuple(map(_t1lib.GetFontName, range(_t1lib.Get_no_fonts())))
namewidth = apply(max, tuple(map(len, names)))
self.font_var = Tkinter.StringVar()
self.font_var.set(names[0])
font_selector = apply(
Tkinter.OptionMenu, (self, self.font_var) + names)
font_selector.configure(width=namewidth, anchor=Tkinter.W,
highlightthickness=0)
self.string_var, entry = self.add_entry("String:", Tkinter.StringVar)
self.add_row("Font:", font_selector)
self.size_var, x = self.add_entry("Size:", Tkinter.DoubleVar, 100.0, 8)
self.spaceoff_var, x = self.add_entry("Space offset:",
Tkinter.DoubleVar, 0.0, 8)
self.angle_var, x = self.add_entry("Rotation:",
Tkinter.DoubleVar, 0.0, 8)
self.kerning_flag = self.add_boolean("Kerning")
self.aa_flag = self.add_boolean("Anti-aliasing")
self.end_rows()
entry.focus_set()
def add_entry(self, text, varclass, value=None, width=None):
var = varclass()
if value is not None:
var.set(value)
entry = Tkinter.Entry(self, textvariable=var, width=width)
entry.bind("<Return>", self.doit)
if width:
expand = None
else:
expand = 1
self.add_row(text, entry, expand)
return var, entry
def add_row(self, text, widget, expand=None):
frame = Tkinter.Frame(self)
label = Tkinter.Label(frame, text=text, anchor=Tkinter.E)
label.pack(side=Tkinter.LEFT)
widget.pack(side=Tkinter.LEFT, in_=frame, fill=Tkinter.X,
anchor=Tkinter.W, expand=expand)
widget.tkraise()
frame.pack(fill=Tkinter.X, padx=4, pady=3)
self.__labels.append(label)
def add_rule(self, size=2):
Tkinter.Frame(self, height=size, borderwidth=1, relief=Tkinter.SUNKEN
).pack(fill=Tkinter.X)
def end_rows(self):
wid = 0
for label in self.__labels:
wid = max(wid, len(label["text"]))
for label in self.__labels:
label["width"] = wid
def add_boolean(self, text):
var = Tkinter.BooleanVar()
widget = Tkinter.Checkbutton(self, text=text, variable=var,
anchor=Tkinter.W, command=self.doit)
self.add_row("", widget, 1)
return var
def doit(self, event=None):
s = self.string_var.get()
if s:
self.display.setGlyph(self.getSetter().setString(s))
def getSetter(self):
key = self.getSetterKey()
try:
return self.__setters[key]
except KeyError:
pass
fontname, size, kerning, spaceoff, angle, aa = key
font = t1lib.getFont(fontname)
if aa:
bpp = 32
else:
bpp = 1
setter = t1Imaging.ImagingSetter(font, size, kerning=kerning, bpp=bpp,
spaceoff=spaceoff, angle=angle)
self.__setters[key] = setter
return setter
def getSetterKey(self):
fontname = self.font_var.get()
size = self.size_var.get()
kerning = self.kerning_flag.get()
spaceoff = self.spaceoff_var.get()
angle = self.angle_var.get()
aa = self.aa_flag.get()
return fontname, size, kerning, spaceoff, angle, aa
def main():
root = Tkinter.Tk()
root.withdraw()
display = DemoDisplay(root)
controller = DemoDialog(root, display)
root.mainloop()
if __name__ == "__main__":
main()
|