Fonts & Tinker
Paul
aquagnu at gmail.com
Sat Jan 26 00:18:01 EST 2013
class FontSpec:
"""Wrapper for something like 'Arial 10 bold #red'
"""
tkf = None # Tk Font
spec = "" # specification
tkspec = "" # specification for Tk
family = None
size = 0
color = "black"
weight = "normal"
slant = "roman"
underline = 0
overstrike = 0
linespace = 0
descent = 0
ascent = 0
def __init__(self, spec=None):
"""spec: familty with capital letter, color with # (#red, ##FF00FF),
size - int, other are styles"""
try:
if not spec:
return
spec = spec.split()
family = [s for s in spec if s.istitle()]
if family:
self.family = family[0]
spec.remove(self.family)
color = [s for s in spec if s.startswith('#')]
if color:
self.color = color[0]
spec.remove(self.color)
self.color = self.color[1:]
size = [s for s in spec if s.isdigit()]
if size:
self.size = size[0]
spec.remove(self.size)
self.size = int(self.size)
if "bold" in spec:
self.weight = "bold"
if "italic" in spec:
self.slant = "italic"
if "underline" in spec:
self.underline = 1
if "overstrike" in spec:
self.overstrike = 1
# create tkFont for metrics
self.tkf = tkFont.Font(family=self.family, size=self.size, weight=self.weight,
slant=self.slant, underline=self.underline, overstrike=self.overstrike)
self.ascent = self.tkf.metrics("ascent")
self.descent = self.tkf.metrics("descent")
self.linespace = self.tkf.metrics("linespace")
# tkspec - specific. of font in Tk standard
self.tkspec = []
if self.family:
self.tkspec.append(self.family)
if self.size:
self.tkspec.append(str(self.size))
if self.weight == "bold":
self.tkspec.append("bold")
if self.slant == "italic":
self.tkspec.append("italic")
if self.underline:
self.tkspec.append("underline")
if self.overstrike:
self.tkspec.append("overstrike")
self.tkspec = " ".join(self.tkspec)
except:
raise ValueError("invalid font specification")
def __str__(self):
return self.tkspec
--- only for ideas
More information about the Python-list
mailing list