Now that we know what comprises a font, let's look at a few ways we can specify them in code.
We simplify things in our Perl/Tk applications by being able to create a single name that refers to a combination of family, size, weight, slant, underline, and overstrike:
$code_font = $mw->fontCreate('code', -family => 'courier', -size => 12);
Once we have created our new font, you can refer to the font by the variable $code_font or by the name, 'code':
$mw->Button(-text => "Show Code", -font => 'code'); $mw->Button(-text => "Show Code2", -font => $code_font);
It is much simpler to specify all the desired font options once and refer to them using the name or variable later in the program. If you don't want to use a name for the font, don't specify it; the system will generate a name for you automatically.
$code_font = $mw->fontCreate(-family => 'courier', -size => 12);
Once the font is created, you can change any of its settings using the fontConfigure method, using the font name or reference as the first argument:
$mw->fontConfigure($code_font, -family => 'Verdana');
The changes will take effect immediately on any widgets using that font, making it very useful for on-the-fly changes.
The -font option will also accept an anonymous array containing the right parts, with or without the identifiers:
-font => ['courier', '14', 'bold'] # The same thing, but more verbose: -font => [-family => 'courier', -size => '14', -weight => 'bold']
The second way is much more verbose, and easier to read, but those of us who prefer to keep our code small and compact might want to stick with the first method. You must specify at minimum the family name; all other specifications are optional.
If creating an anonymous array isn't to your liking, try just using a string containing the relevant parts:
-font => "courier 14 bold" -font => "courier 12 bold italic" -font => "{courier} 14" -font => "{Calisto MT} 18 bold italic overstrike"
There are a few restrictions when using this specification. The family name must always come first, followed by the (optional) size, and any of weight, slant, and so on. If the family name has a space in it, you must put it between curly braces so the font parser can find the full family name. You can put any family name in curly braces, not just those that have spaces in them; if you like this way of specifying fonts, it might be best to always include the curly braces.
In addition to the fonts that are listed with xlsfonts or shown in the Font Control Panel, you can also specify fonts referred to as system fonts. Since these fonts are operating system specific, you will not get the same result from machine to machine, unless they happen to be running the same operating system. Table 3-1 lists system fonts on each of the popular operating system platforms.
Platform |
System fonts |
---|---|
Unix |
(Use xlsfonts for a complete listing) |
Windows |
system, systemfixed, ansi, ansifixed, device, oemfixed |
Macintosh |
system, application |
Copyright © 2002 O'Reilly & Associates. All rights reserved.