diff options
author | Andrew Svetlov <andrew.svetlov@gmail.com> | 2012-04-05 12:41:20 +0300 |
---|---|---|
committer | Andrew Svetlov <andrew.svetlov@gmail.com> | 2012-04-05 12:41:20 +0300 |
commit | 20bbf54f5ee53b20fa22d0eb2e957f88ac927331 (patch) | |
tree | 83c799ee9bca5f7aa5384564b24521e020c4ee46 /Lib/tkinter | |
parent | 9a13b432e73fc19e6c7cf859342af3beb6dcebfc (diff) | |
download | cpython-git-20bbf54f5ee53b20fa22d0eb2e957f88ac927331.tar.gz |
Issue #3033: Add displayof parameter to tkinter font.
Patch by Guilherme Polo.
Diffstat (limited to 'Lib/tkinter')
-rw-r--r-- | Lib/tkinter/font.py | 44 |
1 files changed, 27 insertions, 17 deletions
diff --git a/Lib/tkinter/font.py b/Lib/tkinter/font.py index 27e0cc849a..49292412f0 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() |