summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2004-08-18 11:06:45 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2004-08-18 11:06:45 (GMT)
commitfe84d17a6a3e255191f664c5609a061a9bb70c60 (patch)
tree53151199c68acea5c11d9129eafc48d5bcee6a3e
parent1a7892924fb23f657b63ea085899342f16fad389 (diff)
downloadcpython-fe84d17a6a3e255191f664c5609a061a9bb70c60.zip
cpython-fe84d17a6a3e255191f664c5609a061a9bb70c60.tar.gz
cpython-fe84d17a6a3e255191f664c5609a061a9bb70c60.tar.bz2
Patch #764217: Add nametofont function, exists parameter.
-rw-r--r--Lib/lib-tk/tkFont.py44
-rw-r--r--Misc/NEWS5
2 files changed, 43 insertions, 6 deletions
diff --git a/Lib/lib-tk/tkFont.py b/Lib/lib-tk/tkFont.py
index 7fed99d..5c65d50 100644
--- a/Lib/lib-tk/tkFont.py
+++ b/Lib/lib-tk/tkFont.py
@@ -25,6 +25,11 @@ ROMAN = "roman"
BOLD = "bold"
ITALIC = "italic"
+def nametofont(name):
+ """Given the name of a tk named font, returns a Font representation.
+ """
+ return Font(name=name, exists=True)
+
class Font:
"""Represents a named font.
@@ -32,8 +37,12 @@ class Font:
Constructor options are:
font -- font specifier (name, system font, or (family, size, style)-tuple)
+ name -- name to use for this font configuration (defaults to a unique name)
+ exists -- does a named font by this name already exist?
+ Creates a new named font if False, points to the existing font if True.
+ Raises _tkinter.TclError if the assertion is false.
- or any combination of
+ the following are ignored if font is specified:
family -- font 'family', e.g. Courier, Times, Helvetica
size -- font size in points
@@ -41,7 +50,7 @@ class Font:
slant -- font slant: ROMAN, ITALIC
underline -- font underlining: false (0), true (1)
overstrike -- font strikeout: false (0), true (1)
- name -- name to use for this font configuration (defaults to a unique name)
+
"""
def _set(self, kw):
@@ -63,7 +72,7 @@ class Font:
options[args[i][1:]] = args[i+1]
return options
- def __init__(self, root=None, font=None, name=None, **options):
+ def __init__(self, root=None, font=None, name=None, exists=False, **options):
if not root:
root = Tkinter._default_root
if font:
@@ -74,7 +83,20 @@ class Font:
if not name:
name = "font" + str(id(self))
self.name = name
- root.tk.call("font", "create", name, *font)
+
+ if exists:
+ self.delete_font = False
+ # confirm font exists
+ if self.name not in root.tk.call("font", "names"):
+ raise Tkinter._tkinter.TclError, "named font %s does not already exist" % (self.name,)
+ # if font config info supplied, apply it
+ if font:
+ print "font=%r" % font
+ root.tk.call("font", "configure", self.name, *font)
+ else:
+ # create new font (raises TclError if the font exists)
+ root.tk.call("font", "create", self.name, *font)
+ self.delete_font = True
# backlinks!
self._root = root
self._split = root.tk.splitlist
@@ -83,12 +105,22 @@ class Font:
def __str__(self):
return self.name
+ def __eq__(self, other):
+ return self.name == other.name and isinstance(other, Font)
+
+ def __getitem__(self, key):
+ return self.cget(key)
+
+ def __setitem__(self, key, value):
+ self.configure(**{key: value})
+
def __del__(self):
try:
- self._call("font", "delete", self.name)
+ if self.delete_font:
+ self._call("font", "delete", self.name)
except (AttributeError, Tkinter.TclError):
pass
-
+
def copy(self):
"Return a distinct copy of the current font"
return Font(self._root, **self.actual())
diff --git a/Misc/NEWS b/Misc/NEWS
index c3ce477..eaf6655 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -44,6 +44,11 @@ Extension modules
Library
-------
+- A new function tkFont.nametofont was added to return an existing
+ font. The Font class constructor now has an additional exists argument
+ which, if True, requests to return/configure an existing font, rather
+ than creating a new one.
+
- Updated the decimal package's min() and max() methods to match the
latest revision of the General Decimal Arithmetic Specification.
Quiet NaNs are ignored and equal values are sorted based on sign