如何使用ttk
样式创建带下划线文字的派生样式?
我正在尝试创建一个源自内置ttk
样式的TLabel
样式。内置和派生样式之间的唯一区别应该是文本加下划线;它应该继承内置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()
答案 0 :(得分:2)
问题在于您假设font.Font(underline=1)
返回TLabel
使用的完全相同的字体,但打开了下划线位。根据平台及其配置方式的不同,这可能是也可能不是。
如果您需要将自定义字体设置为TLabel
使用的字体,则应首先复制字体而不是依赖默认字体。
例如:
original_font = font.nametofont(style.lookup("TLabel", "font"))
f = font.Font(**original_font.configure())
f.configure(underline=1)