import os import string def _font_initialise(root, size=None, fontScheme = None): global _fontSize if size is not None: _fontSize = size if fontScheme in ('pmw1', 'pmw2'): if os.name == 'posix': defaultFont = logicalfont('Helvetica') menuFont = logicalfont('Helvetica', weight='bold', slant='italic') scaleFont = logicalfont('Helvetica', slant='italic') root.option_add('*Font', defaultFont, 'userDefault') root.option_add('*Menu*Font', menuFont, 'userDefault') root.option_add('*Menubutton*Font', menuFont, 'userDefault') root.option_add('*Scale.*Font', scaleFont, 'userDefault') if fontScheme == 'pmw1': balloonFont = logicalfont('Helvetica', -6, pixel = '12') else: # fontScheme == 'pmw2' balloonFont = logicalfont('Helvetica', -2) root.option_add('*Balloon.*Font', balloonFont, 'userDefault') else: defaultFont = logicalfont('Helvetica') root.option_add('*Font', defaultFont, 'userDefault') elif fontScheme == 'default': defaultFont = ('Helvetica', '-%d' % (_fontSize,), 'bold') entryFont = ('Helvetica', '-%d' % (_fontSize,)) textFont = ('Courier', '-%d' % (_fontSize,)) root.option_add('*Font', defaultFont, 'userDefault') root.option_add('*Entry*Font', entryFont, 'userDefault') root.option_add('*Text*Font', textFont, 'userDefault') def logicalfont(name='Helvetica', sizeIncr = 0, **kw): if not _fontInfo.has_key(name): raise ValueError, 'font %s does not exist' % name rtn = [] for field in _fontFields: if kw.has_key(field): logicalValue = kw[field] elif _fontInfo[name].has_key(field): logicalValue = _fontInfo[name][field] else: logicalValue = '*' if _propertyAliases[name].has_key((field, logicalValue)): realValue = _propertyAliases[name][(field, logicalValue)] elif _propertyAliases[name].has_key((field, None)): realValue = _propertyAliases[name][(field, None)] elif _propertyAliases[None].has_key((field, logicalValue)): realValue = _propertyAliases[None][(field, logicalValue)] elif _propertyAliases[None].has_key((field, None)): realValue = _propertyAliases[None][(field, None)] else: realValue = logicalValue if field == 'size': if realValue == '*': realValue = _fontSize realValue = str((realValue + sizeIncr) * 10) rtn.append(realValue) return string.join(rtn, '-') def logicalfontnames(): return _fontInfo.keys() if os.name == 'nt': _fontSize = 16 else: _fontSize = 14 _fontFields = ( 'registry', 'foundry', 'family', 'weight', 'slant', 'width', 'style', 'pixel', 'size', 'xres', 'yres', 'spacing', 'avgwidth', 'charset', 'encoding') # <_propertyAliases> defines other names for which property values may # be known by. This is required because italics in adobe-helvetica # are specified by 'o', while other fonts use 'i'. _propertyAliases = {} _propertyAliases[None] = { ('slant', 'italic') : 'i', ('slant', 'normal') : 'r', ('weight', 'light') : 'normal', ('width', 'wide') : 'normal', ('width', 'condensed') : 'normal', } # <_fontInfo> describes a 'logical' font, giving the default values of # some of its properties. _fontInfo = {} _fontInfo['Helvetica'] = { 'foundry' : 'adobe', 'family' : 'helvetica', 'registry' : '', 'charset' : 'iso8859', 'encoding' : '1', 'spacing' : 'p', 'slant' : 'normal', 'width' : 'normal', 'weight' : 'normal', } _propertyAliases['Helvetica'] = { ('slant', 'italic') : 'o', ('weight', 'normal') : 'medium', ('weight', 'light') : 'medium', } _fontInfo['Times'] = { 'foundry' : 'adobe', 'family' : 'times', 'registry' : '', 'charset' : 'iso8859', 'encoding' : '1', 'spacing' : 'p', 'slant' : 'normal', 'width' : 'normal', 'weight' : 'normal', } _propertyAliases['Times'] = { ('weight', 'normal') : 'medium', ('weight', 'light') : 'medium', } _fontInfo['Fixed'] = { 'foundry' : 'misc', 'family' : 'fixed', 'registry' : '', 'charset' : 'iso8859', 'encoding' : '1', 'spacing' : 'c', 'slant' : 'normal', 'width' : 'normal', 'weight' : 'normal', } _propertyAliases['Fixed'] = { ('weight', 'normal') : 'medium', ('weight', 'light') : 'medium', ('style', None) : '', ('width', 'condensed') : 'semicondensed', } _fontInfo['Courier'] = { 'foundry' : 'adobe', 'family' : 'courier', 'registry' : '', 'charset' : 'iso8859', 'encoding' : '1', 'spacing' : 'm', 'slant' : 'normal', 'width' : 'normal', 'weight' : 'normal', } _propertyAliases['Courier'] = { ('weight', 'normal') : 'medium', ('weight', 'light') : 'medium', ('style', None) : '', } _fontInfo['Typewriter'] = { 'foundry' : 'b&h', 'family' : 'lucidatypewriter', 'registry' : '', 'charset' : 'iso8859', 'encoding' : '1', 'spacing' : 'm', 'slant' : 'normal', 'width' : 'normal', 'weight' : 'normal', } _propertyAliases['Typewriter'] = { ('weight', 'normal') : 'medium', ('weight', 'light') : 'medium', } if os.name == 'nt': # For some reason 'fixed' fonts on NT aren't. _fontInfo['Fixed'] = _fontInfo['Courier'] _propertyAliases['Fixed'] = _propertyAliases['Courier']