summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Svetlov <andrew.svetlov@gmail.com>2012-04-05 09:41:20 (GMT)
committerAndrew Svetlov <andrew.svetlov@gmail.com>2012-04-05 09:41:20 (GMT)
commit20bbf54f5ee53b20fa22d0eb2e957f88ac927331 (patch)
tree83c799ee9bca5f7aa5384564b24521e020c4ee46
parent9a13b432e73fc19e6c7cf859342af3beb6dcebfc (diff)
downloadcpython-20bbf54f5ee53b20fa22d0eb2e957f88ac927331.zip
cpython-20bbf54f5ee53b20fa22d0eb2e957f88ac927331.tar.gz
cpython-20bbf54f5ee53b20fa22d0eb2e957f88ac927331.tar.bz2
Issue #3033: Add displayof parameter to tkinter font.
Patch by Guilherme Polo.
-rw-r--r--Lib/tkinter/font.py44
-rw-r--r--Misc/NEWS2
2 files changed, 29 insertions, 17 deletions
diff --git a/Lib/tkinter/font.py b/Lib/tkinter/font.py
index 27e0cc8..4929241 100644
--- a/Lib/tkinter/font.py
+++ b/Lib/tkinter/font.py
@@ -2,9 +2,6 @@
#
# written by Fredrik Lundh, February 1998
#
-# FIXME: should add 'displayof' option where relevant (actual, families,
-# measure, and metrics)
-#
__version__ = "0.9"
@@ -124,14 +121,17 @@ class Font:
"Return a distinct copy of the current font"
return Font(self._root, **self.actual())
- def actual(self, option=None):
+ def actual(self, option=None, displayof=None):
"Return actual font attributes"
+ args = ()
+ if displayof:
+ args = ('-displayof', displayof)
if option:
- return self._call("font", "actual", self.name, "-"+option)
+ args = args + ('-' + option, )
+ return self._call("font", "actual", self.name, *args)
else:
return self._mkdict(
- self._split(self._call("font", "actual", self.name))
- )
+ self._split(self._call("font", "actual", self.name, *args)))
def cget(self, option):
"Get font attribute"
@@ -148,32 +148,42 @@ class Font:
configure = config
- def measure(self, text):
+ def measure(self, text, displayof=None):
"Return text width"
- return int(self._call("font", "measure", self.name, text))
+ args = (text,)
+ if displayof:
+ args = ('-displayof', displayof, text)
+ return int(self._call("font", "measure", self.name, *args))
- def metrics(self, *options):
+ def metrics(self, *options, **kw):
"""Return font metrics.
For best performance, create a dummy widget
using this font before calling this method."""
-
+ args = ()
+ displayof = kw.pop('displayof', None)
+ if displayof:
+ args = ('-displayof', displayof)
if options:
+ args = args + self._get(options)
return int(
- self._call("font", "metrics", self.name, self._get(options)))
+ self._call("font", "metrics", self.name, *args))
else:
- res = self._split(self._call("font", "metrics", self.name))
+ res = self._split(self._call("font", "metrics", self.name, *args))
options = {}
for i in range(0, len(res), 2):
options[res[i][1:]] = int(res[i+1])
return options
-def families(root=None):
+def families(root=None, displayof=None):
"Get font families (as a tuple)"
if not root:
root = tkinter._default_root
- return root.tk.splitlist(root.tk.call("font", "families"))
+ args = ()
+ if displayof:
+ args = ('-displayof', displayof)
+ return root.tk.splitlist(root.tk.call("font", "families", *args))
def names(root=None):
@@ -205,10 +215,10 @@ if __name__ == "__main__":
print(f.measure("hello"), f.metrics("linespace"))
- print(f.metrics())
+ print(f.metrics(displayof=root))
f = Font(font=("Courier", 20, "bold"))
- print(f.measure("hello"), f.metrics("linespace"))
+ print(f.measure("hello"), f.metrics("linespace", displayof=root))
w = tkinter.Label(root, text="Hello, world", font=f)
w.pack()
diff --git a/Misc/NEWS b/Misc/NEWS
index 012863c..995900f 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -19,6 +19,8 @@ Core and Builtins
Library
-------
+- Issue #3033: Add displayof parameter to tkinter font. Patch by Guilherme Polo.
+
- Issue #14482: Raise a ValueError, not a NameError, when trying to create
a multiprocessing Client or Listener with an AF_UNIX type address under
Windows. Patch by Popa Claudiu.