我正在嘗試從我設定的樣式中獲取字體名稱和下劃線設定。
問題是,當我使用:
style.lookup("My.TLabel", "font"),
它回傳字串
字體1
為什么 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() 回傳字體名稱和下劃線設定的任何想法?
uj5u.com熱心網友回復:
底層的 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')}")
uj5u.com熱心網友回復:
事實證明,字體物件有一個名稱欄位(字串)。
我們可以將字體物件的名稱與 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://www.uj5u.com/caozuo/486930.html
標籤:tkinter
