使用ttk样式

时间:2017-10-03 16:34:09

标签: python python-3.x tkinter ttk

摘要

如何使用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()

1 个答案:

答案 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)
相关问题