首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取样式字体(Ttk)

获取样式字体(Ttk)
EN

Stack Overflow用户
提问于 2022-06-01 16:40:06
回答 2查看 51关注 0票数 0

我正在尝试从我设置的样式中获取字体名称和下划线设置。

问题是,当我使用:

style.lookup("My.TLabel", "font")

它返回字符串。

font1

为什么style.lookup()不返回实际的字体名称和下划线信息?

代码语言:javascript
运行
复制
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()将按预期工作:

代码语言:javascript
运行
复制
style.configure("My.TLabel", font="TkDefaultFont 25 underline")
style.lookup("My.TLabel", "font")
>> TkDefaultFont 25 underline

但是,如果我这样做,它不会使用style.lookup()返回字体名:

代码语言:javascript
运行
复制
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()返回字体名和下划线设置有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-01 18:15:54

底层的tcl/tk引擎不了解python对象,所以它所能做的就是返回字符串(和字符串列表)。

字体模块提供了一种将字体名称转换为字体对象的方法。下面的示例说明了如何:

代码语言:javascript
运行
复制
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')}")
票数 0
EN

Stack Overflow用户

发布于 2022-06-01 17:05:30

结果显示,一个字体对象有一个名称字段(string)。

我们可以将字体对象的名称与style.lookup()返回的内容进行比较。如果它们匹配,那么我们就知道我们有我们感兴趣的字体。然后,我们可以使用cget()方法从字体对象中获取各个属性(字体名称、大小、下划线)。

下面是一个例子:

代码语言:javascript
运行
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72465368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档