我正在尝试从我设置的样式中获取字体名称和下划线设置。
问题是,当我使用:
style.lookup("My.TLabel", "font")
,
它返回字符串。
font1
为什么style.lookup()不返回实际的字体名称和下划线信息?
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
但是,如果我这样做,它不会使用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()返回字体名和下划线设置有什么想法吗?
发布于 2022-06-01 18:15:54
底层的tcl/tk引擎不了解python对象,所以它所能做的就是返回字符串(和字符串列表)。
字体模块提供了一种将字体名称转换为字体对象的方法。下面的示例说明了如何:
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')}")
发布于 2022-06-01 17:05:30
结果显示,一个字体对象有一个名称字段(string)。
我们可以将字体对象的名称与style.lookup()返回的内容进行比较。如果它们匹配,那么我们就知道我们有我们感兴趣的字体。然后,我们可以使用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()
https://stackoverflow.com/questions/72465368
复制相似问题