mirror of
https://github.com/python/cpython.git
synced 2025-10-11 17:32:49 +00:00
Issue #3033: Add displayof parameter to tkinter font.
Patch by Guilherme Polo.
This commit is contained in:
parent
9a13b432e7
commit
20bbf54f5e
2 changed files with 29 additions and 17 deletions
|
@ -2,9 +2,6 @@
|
||||||
#
|
#
|
||||||
# written by Fredrik Lundh, February 1998
|
# written by Fredrik Lundh, February 1998
|
||||||
#
|
#
|
||||||
# FIXME: should add 'displayof' option where relevant (actual, families,
|
|
||||||
# measure, and metrics)
|
|
||||||
#
|
|
||||||
|
|
||||||
__version__ = "0.9"
|
__version__ = "0.9"
|
||||||
|
|
||||||
|
@ -124,14 +121,17 @@ class Font:
|
||||||
"Return a distinct copy of the current font"
|
"Return a distinct copy of the current font"
|
||||||
return Font(self._root, **self.actual())
|
return Font(self._root, **self.actual())
|
||||||
|
|
||||||
def actual(self, option=None):
|
def actual(self, option=None, displayof=None):
|
||||||
"Return actual font attributes"
|
"Return actual font attributes"
|
||||||
|
args = ()
|
||||||
|
if displayof:
|
||||||
|
args = ('-displayof', displayof)
|
||||||
if option:
|
if option:
|
||||||
return self._call("font", "actual", self.name, "-"+option)
|
args = args + ('-' + option, )
|
||||||
|
return self._call("font", "actual", self.name, *args)
|
||||||
else:
|
else:
|
||||||
return self._mkdict(
|
return self._mkdict(
|
||||||
self._split(self._call("font", "actual", self.name))
|
self._split(self._call("font", "actual", self.name, *args)))
|
||||||
)
|
|
||||||
|
|
||||||
def cget(self, option):
|
def cget(self, option):
|
||||||
"Get font attribute"
|
"Get font attribute"
|
||||||
|
@ -148,32 +148,42 @@ class Font:
|
||||||
|
|
||||||
configure = config
|
configure = config
|
||||||
|
|
||||||
def measure(self, text):
|
def measure(self, text, displayof=None):
|
||||||
"Return text width"
|
"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.
|
"""Return font metrics.
|
||||||
|
|
||||||
For best performance, create a dummy widget
|
For best performance, create a dummy widget
|
||||||
using this font before calling this method."""
|
using this font before calling this method."""
|
||||||
|
args = ()
|
||||||
|
displayof = kw.pop('displayof', None)
|
||||||
|
if displayof:
|
||||||
|
args = ('-displayof', displayof)
|
||||||
if options:
|
if options:
|
||||||
|
args = args + self._get(options)
|
||||||
return int(
|
return int(
|
||||||
self._call("font", "metrics", self.name, self._get(options)))
|
self._call("font", "metrics", self.name, *args))
|
||||||
else:
|
else:
|
||||||
res = self._split(self._call("font", "metrics", self.name))
|
res = self._split(self._call("font", "metrics", self.name, *args))
|
||||||
options = {}
|
options = {}
|
||||||
for i in range(0, len(res), 2):
|
for i in range(0, len(res), 2):
|
||||||
options[res[i][1:]] = int(res[i+1])
|
options[res[i][1:]] = int(res[i+1])
|
||||||
return options
|
return options
|
||||||
|
|
||||||
|
|
||||||
def families(root=None):
|
def families(root=None, displayof=None):
|
||||||
"Get font families (as a tuple)"
|
"Get font families (as a tuple)"
|
||||||
if not root:
|
if not root:
|
||||||
root = tkinter._default_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):
|
def names(root=None):
|
||||||
|
@ -205,10 +215,10 @@ if __name__ == "__main__":
|
||||||
|
|
||||||
print(f.measure("hello"), f.metrics("linespace"))
|
print(f.measure("hello"), f.metrics("linespace"))
|
||||||
|
|
||||||
print(f.metrics())
|
print(f.metrics(displayof=root))
|
||||||
|
|
||||||
f = Font(font=("Courier", 20, "bold"))
|
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 = tkinter.Label(root, text="Hello, world", font=f)
|
||||||
w.pack()
|
w.pack()
|
||||||
|
|
|
@ -19,6 +19,8 @@ Core and Builtins
|
||||||
Library
|
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
|
- Issue #14482: Raise a ValueError, not a NameError, when trying to create
|
||||||
a multiprocessing Client or Listener with an AF_UNIX type address under
|
a multiprocessing Client or Listener with an AF_UNIX type address under
|
||||||
Windows. Patch by Popa Claudiu.
|
Windows. Patch by Popa Claudiu.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue