Python3 GTK3:如何将GtkFontButton字体样式复制到Label
当然可以!这在GTK里实现起来非常直观简洁,核心就是利用GtkFontButton的font-set信号(用户确认字体选择后触发),再把获取到的字体配置直接应用到目标Label上。
核心思路
- 监听
GtkFontButton的font-set信号,该信号会在用户完成字体选择并确认后触发 - 在信号回调中,通过
get_font_name()拿到格式如"Sans Bold Italic 11"的字体字符串 - 将该字符串转换为
Pango.FontDescription对象,应用到目标Label上
代码示例(以Python + GTK4为例)
假设你已经在类中初始化了self.font_button(GtkFontButton实例)和self.target_label(需要同步字体的Label):
首先导入必要的模块:
from gi.repository import Gtk, Pango
然后在初始化方法中连接信号:
def __init__(self): # 其他初始化代码... self.font_button.connect("font-set", self.on_font_selected)
接着实现信号回调函数:
def on_font_selected(self, font_button): # 获取选中的字体配置字符串 font_config = font_button.get_font_name() # 转换为Pango字体描述对象并应用到Label font_desc = Pango.FontDescription(font_config) self.target_label.set_font_desc(font_desc)
更简洁的写法(一行搞定)
如果不想单独定义回调函数,也可以用lambda表达式简化:
self.font_button.connect("font-set", lambda btn: self.target_label.set_font_desc(Pango.FontDescription(btn.get_font_name())))
针对GTK3的适配
如果你用的是GTK3,只需要把set_font_desc()换成override_font()即可:
def on_font_selected(self, font_button): font_config = font_button.get_font_name() self.target_label.override_font(Pango.FontDescription(font_config))
这样设置后,每次用户通过GtkFontButton选好字体,你的目标Label就会自动同步对应的字体名称、粗细和字号样式,完全满足你的需求。
内容的提问来源于stack exchange,提问作者ilias iliadis
相关产品推荐
相关产品推荐

