【问题标题】:Create Derived Underline Text Style Using ttk Styling使用 ttk 样式创建派生的下划线文本样式
【发布时间】:2017-10-03 16:34:08
【问题描述】:

总结

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

【问题讨论】:

    标签: python python-3.x tkinter ttk


    【解决方案1】:

    问题是您假设font.Font(underline=1) 返回的字体与TLabel 使用的字体完全相同,但下划线位已打开。这可能会也可能不会,具体取决于平台及其配置方式。

    如果您需要自定义字体基于TLabel 使用的字体,您应该首先制作字体副本,而不是依赖默认字体。

    例如:

    original_font = font.nametofont(style.lookup("TLabel", "font"))
    f = font.Font(**original_font.configure())
    f.configure(underline=1)
    

    【讨论】:

    • 我知道我做出了这样的假设,并认为这是问题所在。但是,我无法确定如何绕过它。谢谢!
    猜你喜欢
    • 2013-06-29
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 2015-03-20
    • 2023-01-03
    • 2018-04-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多