使用 ttk 样式创建派生的下划线文本样式
Create Derived Underline Text Style Using ttk Styling
总结
如何使用 ttk
样式创建带下划线文本的派生样式?
详情
我正在尝试创建从内置 TLabel
样式派生的 ttk
样式。内置样式和派生样式之间的唯一区别应该是文本带有下划线;它应该继承内置 TLabel
样式的所有其他特征(即,如果 TLabel
字体稍后更改,Underline.TLabel
也应更改)。
我知道基本方法(不使用 ttk
样式)是创建新的带下划线的字体。但是,正如您从示例代码(下面)中看到的那样,Underline.TLabel
样式以正确的(默认)字体显示,但字体大小更大。我确定我遗漏了一些明显的东西,但无法通过任何 Google 搜索等找到它
import tkinter as tk
from tkinter import font
from tkinter import ttk
def main():
root = tk.Tk()
style = ttk.Style(root)
f = font.Font(underline=1)
style.configure('Underline.TLabel', font=f)
lbl0 = ttk.Label(root, text='Label 0', style='TLabel')
lbl0.pack()
lbl1 = ttk.Label(root, text='Label 1', style='Underline.TLabel')
lbl1.pack()
root.mainloop()
if __name__ == '__main__':
main()
问题是您假设 font.Font(underline=1)
returns 与 TLabel
使用的字体完全相同,但打开了下划线位。这可能正确也可能不正确,具体取决于平台及其配置方式。
如果您需要自定义字体基于 TLabel
使用的字体,您应该首先复制字体而不是依赖默认字体。
例如:
original_font = font.nametofont(style.lookup("TLabel", "font"))
f = font.Font(**original_font.configure())
f.configure(underline=1)
总结
如何使用 ttk
样式创建带下划线文本的派生样式?
详情
我正在尝试创建从内置 TLabel
样式派生的 ttk
样式。内置样式和派生样式之间的唯一区别应该是文本带有下划线;它应该继承内置 TLabel
样式的所有其他特征(即,如果 TLabel
字体稍后更改,Underline.TLabel
也应更改)。
我知道基本方法(不使用 ttk
样式)是创建新的带下划线的字体。但是,正如您从示例代码(下面)中看到的那样,Underline.TLabel
样式以正确的(默认)字体显示,但字体大小更大。我确定我遗漏了一些明显的东西,但无法通过任何 Google 搜索等找到它
import tkinter as tk
from tkinter import font
from tkinter import ttk
def main():
root = tk.Tk()
style = ttk.Style(root)
f = font.Font(underline=1)
style.configure('Underline.TLabel', font=f)
lbl0 = ttk.Label(root, text='Label 0', style='TLabel')
lbl0.pack()
lbl1 = ttk.Label(root, text='Label 1', style='Underline.TLabel')
lbl1.pack()
root.mainloop()
if __name__ == '__main__':
main()
问题是您假设 font.Font(underline=1)
returns 与 TLabel
使用的字体完全相同,但打开了下划线位。这可能正确也可能不正确,具体取决于平台及其配置方式。
如果您需要自定义字体基于 TLabel
使用的字体,您应该首先复制字体而不是依赖默认字体。
例如:
original_font = font.nametofont(style.lookup("TLabel", "font"))
f = font.Font(**original_font.configure())
f.configure(underline=1)