从 tkinter 小部件获取字体对象

Obtaining font object from a tkinter widget

如何从现有的 tkinter 小部件获取字体对象?例如,我需要它来测量字符串。或者我可能想创建另一个具有相同字体的小部件,所以我将把这个字体对象传递给构造函数。

我从中获取字体的小部件可能在程序的其他地方明确设置了它的字体,也可能没有。该解决方案在任何一种情况下都应该有效。

这是一个小测试程序,显示了我正在尝试做的事情。我在 Linux 上的 Python-3.4.3 中尝试过。如果解决方案是跨平台的就好了。

import tkinter as tk
import tkinter.font

def test():
    """ Demonstrate the ability to obtain font and use it. """
    font = myLabel.cget('font')
    print(font) # -misc-fixed-medium-r-normal--14-130-75-75-c-70-*-*
    print(type(font)) # <class 'str'>
    try:
        print(font.measure('My test text.')) # fail
    except Exception as e:
        print(e) # 'str' object has no attribute 'measure'
    try:
        # Try creating a new Font object from a string returned by cget('font').
        font = tkinter.font.Font(myLabel.cget('font')) # fail
        print(font.measure('My test text.'))
    except Exception as e:
        print(e) # 'str' object has no attribute 'call'

root = tk.Tk()
myLabel = tk.Label(root, text='My Label')
myLabel.pack(side=tk.TOP, padx=20, pady=20)
root.after(1000, test)
root.mainloop()  

font.nametofont(w.cget('font')):

import tkinter as tk
from tkinter import font
root = tk.Tk()
w = tk.Button()
wfont = font.nametofont(w.cget('font'))