获取样式字体 (Ttk)
Get style font (Ttk)
我正在尝试从我设置的样式中获取字体名称和下划线设置。
问题是,当我使用:
style.lookup("My.TLabel", "font")
,
它return是字符串
font1
为什么 style.lookup() return 没有输入实际的字体名称和下划线信息?
import tkinter as tk
import tkinter.font as tkFont
from tkinter import ttk
root = tk.Tk()
custom_font = tkFont.Font(family="TkDefaultFont",
size=25,
underline=True)
style = ttk.Style()
style.configure("My.TLabel", font=custom_font)
info = style.lookup("My.TLabel", "font")
print(info) # <--Here, it gives me 'font1' instead of tkDefaultFont
root.mainloop()
注意:如果我将字体指定为字符串,style.lookup() 将按预期工作:
style.configure("My.TLabel", font="TkDefaultFont 25 underline")
style.lookup("My.TLabel", "font")
>> TkDefaultFont 25 underline
但如果我这样做,它不会 return 使用 style.lookup() 的字体名称:
custom_font = tkFont.Font(family="TkDefaultFont",
size=25,
underline=True)
style.configure("My.TLabel", font=custom_font)
style.lookup("My.TLabel", "font")
>> font1
但我想将字体对象而不是字符串传递给 style.configure()。
关于如何让 style.lookup() 到 return 字体名称和下划线设置的任何想法?
原来一个字体对象有一个name字段(字符串)。
我们可以将字体对象的名称与 style.lookup() 将 return 的名称进行比较。如果它们匹配,那么我们就知道我们有我们感兴趣的字体。然后我们可以使用 cget()方法。
这是一个例子:
import tkinter as tk
import tkinter.font as tkFont
from tkinter import ttk
root = tk.Tk()
custom_font = tkFont.Font(family="TkDefaultFont",
size=25,
underline=True)
style = ttk.Style()
style.configure("My.TLabel", font=custom_font)
label_font = style.lookup("My.TLabel", "font")
if label_font == custom_font.name:
# Get the font info
font_name = custom_font.cget("family")
size = custom_font.cget("size")
is_underlined = custom_font.cget("underline")
print(f"{font_name=}, {size=}, {is_underlined=}")
root.mainloop()
底层 tcl/tk 引擎不了解 python 对象,因此它所能做的就是 return 字符串(和字符串列表)。
字体模块附带了一种将字体名称转换为字体对象的方法。以下示例说明了如何:
import tkinter as tk
import tkinter.font
from tkinter import ttk
style = ttk.Style()
font_name = style.lookup("My.TLabel", "font")
font = tkinter.font.nametofont(font_name)
print(f"family: {font.cget('family')} size: {font.cget('size')}")
我正在尝试从我设置的样式中获取字体名称和下划线设置。
问题是,当我使用:
style.lookup("My.TLabel", "font")
,
它return是字符串
font1
为什么 style.lookup() return 没有输入实际的字体名称和下划线信息?
import tkinter as tk
import tkinter.font as tkFont
from tkinter import ttk
root = tk.Tk()
custom_font = tkFont.Font(family="TkDefaultFont",
size=25,
underline=True)
style = ttk.Style()
style.configure("My.TLabel", font=custom_font)
info = style.lookup("My.TLabel", "font")
print(info) # <--Here, it gives me 'font1' instead of tkDefaultFont
root.mainloop()
注意:如果我将字体指定为字符串,style.lookup() 将按预期工作:
style.configure("My.TLabel", font="TkDefaultFont 25 underline")
style.lookup("My.TLabel", "font")
>> TkDefaultFont 25 underline
但如果我这样做,它不会 return 使用 style.lookup() 的字体名称:
custom_font = tkFont.Font(family="TkDefaultFont",
size=25,
underline=True)
style.configure("My.TLabel", font=custom_font)
style.lookup("My.TLabel", "font")
>> font1
但我想将字体对象而不是字符串传递给 style.configure()。 关于如何让 style.lookup() 到 return 字体名称和下划线设置的任何想法?
原来一个字体对象有一个name字段(字符串)。
我们可以将字体对象的名称与 style.lookup() 将 return 的名称进行比较。如果它们匹配,那么我们就知道我们有我们感兴趣的字体。然后我们可以使用 cget()方法。
这是一个例子:
import tkinter as tk
import tkinter.font as tkFont
from tkinter import ttk
root = tk.Tk()
custom_font = tkFont.Font(family="TkDefaultFont",
size=25,
underline=True)
style = ttk.Style()
style.configure("My.TLabel", font=custom_font)
label_font = style.lookup("My.TLabel", "font")
if label_font == custom_font.name:
# Get the font info
font_name = custom_font.cget("family")
size = custom_font.cget("size")
is_underlined = custom_font.cget("underline")
print(f"{font_name=}, {size=}, {is_underlined=}")
root.mainloop()
底层 tcl/tk 引擎不了解 python 对象,因此它所能做的就是 return 字符串(和字符串列表)。
字体模块附带了一种将字体名称转换为字体对象的方法。以下示例说明了如何:
import tkinter as tk
import tkinter.font
from tkinter import ttk
style = ttk.Style()
font_name = style.lookup("My.TLabel", "font")
font = tkinter.font.nametofont(font_name)
print(f"family: {font.cget('family')} size: {font.cget('size')}")