annotate Lib/lib-tk/tkFont.py @ 80661:94de77bd0b4b 2.7

Issue #16194: document imp.load_dynamic problems when read several extension modules from the same binary object file.
author Andrew Svetlov <andrew.svetlov@gmail.com>
date Thu, 29 Nov 2012 19:51:28 +0200
parents b53604fad54b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
35858
6a018d8c59c9 r903@spiff: Fredrik | 2005-11-12 16:28:37 +0100
Fredrik Lundh <fredrik@pythonware.com>
parents: 33205
diff changeset
1 # Tkinter font wrapper
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 #
35858
6a018d8c59c9 r903@spiff: Fredrik | 2005-11-12 16:28:37 +0100
Fredrik Lundh <fredrik@pythonware.com>
parents: 33205
diff changeset
3 # written by Fredrik Lundh, February 1998
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 #
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 # FIXME: should add 'displayof' option where relevant (actual, families,
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 # measure, and metrics)
15308
847ae40074d4 Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents: 8960
diff changeset
7 #
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
8
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 __version__ = "0.9"
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
10
47183
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47182
diff changeset
11 import Tkinter
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
12
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 # weight/slant
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 NORMAL = "normal"
29473
14a1547129fb Patch #751107: Slant must be 'roman', not 'normal'.
Martin v. Löwis <martin@v.loewis.de>
parents: 28513
diff changeset
15 ROMAN = "roman"
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 BOLD = "bold"
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 ITALIC = "italic"
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
18
33170
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
19 def nametofont(name):
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
20 """Given the name of a tk named font, returns a Font representation.
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
21 """
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
22 return Font(name=name, exists=True)
33204
c18aca7e81cb Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 33181
diff changeset
23
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 class Font:
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
25
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 """Represents a named font.
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
27
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 Constructor options are:
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
29
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 font -- font specifier (name, system font, or (family, size, style)-tuple)
33170
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
31 name -- name to use for this font configuration (defaults to a unique name)
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
32 exists -- does a named font by this name already exist?
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
33 Creates a new named font if False, points to the existing font if True.
47183
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47182
diff changeset
34 Raises _Tkinter.TclError if the assertion is false.
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
35
33170
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
36 the following are ignored if font is specified:
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
37
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 family -- font 'family', e.g. Courier, Times, Helvetica
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 size -- font size in points
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 weight -- font thickness: NORMAL, BOLD
29473
14a1547129fb Patch #751107: Slant must be 'roman', not 'normal'.
Martin v. Löwis <martin@v.loewis.de>
parents: 28513
diff changeset
41 slant -- font slant: ROMAN, ITALIC
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 underline -- font underlining: false (0), true (1)
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 overstrike -- font strikeout: false (0), true (1)
33204
c18aca7e81cb Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 33181
diff changeset
44
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 """
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
46
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 def _set(self, kw):
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 options = []
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 for k, v in kw.items():
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 options.append("-"+k)
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 options.append(str(v))
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 return tuple(options)
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
53
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 def _get(self, args):
15308
847ae40074d4 Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents: 8960
diff changeset
55 options = []
847ae40074d4 Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents: 8960
diff changeset
56 for k in args:
847ae40074d4 Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents: 8960
diff changeset
57 options.append("-"+k)
847ae40074d4 Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents: 8960
diff changeset
58 return tuple(options)
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
59
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 def _mkdict(self, args):
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 options = {}
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 for i in range(0, len(args), 2):
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 options[args[i][1:]] = args[i+1]
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 return options
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
65
33170
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
66 def __init__(self, root=None, font=None, name=None, exists=False, **options):
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 if not root:
47183
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47182
diff changeset
68 root = Tkinter._default_root
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 if font:
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 # get actual settings corresponding to the given font
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 font = root.tk.splitlist(root.tk.call("font", "actual", font))
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 else:
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 font = self._set(options)
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 if not name:
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 name = "font" + str(id(self))
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 self.name = name
33170
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
77
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
78 if exists:
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
79 self.delete_font = False
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
80 # confirm font exists
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
81 if self.name not in root.tk.call("font", "names"):
47183
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47182
diff changeset
82 raise Tkinter._tkinter.TclError, "named font %s does not already exist" % (self.name,)
33170
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
83 # if font config info supplied, apply it
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
84 if font:
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
85 root.tk.call("font", "configure", self.name, *font)
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
86 else:
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
87 # create new font (raises TclError if the font exists)
33204
c18aca7e81cb Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 33181
diff changeset
88 root.tk.call("font", "create", self.name, *font)
33170
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
89 self.delete_font = True
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 # backlinks!
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 self._root = root
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 self._split = root.tk.splitlist
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 self._call = root.tk.call
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
94
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
95 def __str__(self):
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 return self.name
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
97
33170
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
98 def __eq__(self, other):
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
99 return self.name == other.name and isinstance(other, Font)
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
100
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
101 def __getitem__(self, key):
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
102 return self.cget(key)
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
103
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
104 def __setitem__(self, key, value):
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
105 self.configure(**{key: value})
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
106
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
107 def __del__(self):
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
108 try:
33170
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
109 if self.delete_font:
a5769e8f1c6f Patch #764217: Add nametofont function, exists parameter.
Martin v. Löwis <martin@v.loewis.de>
parents: 29473
diff changeset
110 self._call("font", "delete", self.name)
37636
2e8ab797ceaf Patch #1468808: don't complain if Tkinter is already deleted at the time Font.__del__ is run.
Georg Brandl <georg@python.org>
parents: 35858
diff changeset
111 except (KeyboardInterrupt, SystemExit):
2e8ab797ceaf Patch #1468808: don't complain if Tkinter is already deleted at the time Font.__del__ is run.
Georg Brandl <georg@python.org>
parents: 35858
diff changeset
112 raise
2e8ab797ceaf Patch #1468808: don't complain if Tkinter is already deleted at the time Font.__del__ is run.
Georg Brandl <georg@python.org>
parents: 35858
diff changeset
113 except Exception:
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
114 pass
33204
c18aca7e81cb Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 33181
diff changeset
115
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 def copy(self):
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
117 "Return a distinct copy of the current font"
28513
90c77b8af1a4 SF patch #701494: more apply removals
Raymond Hettinger <python@rcn.com>
parents: 16517
diff changeset
118 return Font(self._root, **self.actual())
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
119
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 def actual(self, option=None):
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
121 "Return actual font attributes"
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
122 if option:
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 return self._call("font", "actual", self.name, "-"+option)
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 else:
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 return self._mkdict(
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 self._split(self._call("font", "actual", self.name))
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 )
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
128
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 def cget(self, option):
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
130 "Get font attribute"
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
131 return self._call("font", "config", self.name, "-"+option)
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
132
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
133 def config(self, **options):
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
134 "Modify font attributes"
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
135 if options:
28513
90c77b8af1a4 SF patch #701494: more apply removals
Raymond Hettinger <python@rcn.com>
parents: 16517
diff changeset
136 self._call("font", "config", self.name,
90c77b8af1a4 SF patch #701494: more apply removals
Raymond Hettinger <python@rcn.com>
parents: 16517
diff changeset
137 *self._set(options))
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
138 else:
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
139 return self._mkdict(
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
140 self._split(self._call("font", "config", self.name))
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
141 )
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
142
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
143 configure = config
15308
847ae40074d4 Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents: 8960
diff changeset
144
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
145 def measure(self, text):
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
146 "Return text width"
16517
eee67a84e5fa String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents: 15308
diff changeset
147 return int(self._call("font", "measure", self.name, text))
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
148
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
149 def metrics(self, *options):
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
150 """Return font metrics.
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
151
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
152 For best performance, create a dummy widget
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
153 using this font before calling this method."""
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
154
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
155 if options:
16517
eee67a84e5fa String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents: 15308
diff changeset
156 return int(
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
157 self._call("font", "metrics", self.name, self._get(options))
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
158 )
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
159 else:
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 res = self._split(self._call("font", "metrics", self.name))
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
161 options = {}
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
162 for i in range(0, len(res), 2):
16517
eee67a84e5fa String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents: 15308
diff changeset
163 options[res[i][1:]] = int(res[i+1])
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
164 return options
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
165
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
166 def families(root=None):
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
167 "Get font families (as a tuple)"
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
168 if not root:
47183
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47182
diff changeset
169 root = Tkinter._default_root
15308
847ae40074d4 Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents: 8960
diff changeset
170 return root.tk.splitlist(root.tk.call("font", "families"))
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
171
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
172 def names(root=None):
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
173 "Get names of defined fonts (as a tuple)"
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
174 if not root:
47183
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47182
diff changeset
175 root = Tkinter._default_root
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
176 return root.tk.splitlist(root.tk.call("font", "names"))
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
177
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
178 # --------------------------------------------------------------------
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
179 # test stuff
15308
847ae40074d4 Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents: 8960
diff changeset
180
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
181 if __name__ == "__main__":
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
182
47183
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47182
diff changeset
183 root = Tkinter.Tk()
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
184
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
185 # create a font
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
186 f = Font(family="times", size=30, weight=NORMAL)
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
187
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
188 print f.actual()
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
189 print f.actual("family")
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
190 print f.actual("weight")
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
191
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
192 print f.config()
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
193 print f.cget("family")
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
194 print f.cget("weight")
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
195
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
196 print names()
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
197
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
198 print f.measure("hello"), f.metrics("linespace")
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
199
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
200 print f.metrics()
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
201
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
202 f = Font(font=("Courier", 20, "bold"))
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
203 print f.measure("hello"), f.metrics("linespace")
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
204
47183
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47182
diff changeset
205 w = Tkinter.Label(root, text="Hello, world", font=f)
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
206 w.pack()
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
207
47183
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47182
diff changeset
208 w = Tkinter.Button(root, text="Quit!", command=root.destroy)
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
209 w.pack()
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
210
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
211 fb = Font(font=w["font"]).copy()
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
212 fb.config(weight=BOLD)
15308
847ae40074d4 Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents: 8960
diff changeset
213
8960
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
214 w.config(font=fb)
9618a86879ca Fredrik Lundh's font wrapper.
Guido van Rossum <guido@python.org>
parents:
diff changeset
215
47183
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47182
diff changeset
216 Tkinter.mainloop()