You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3 GTK3:如何将GtkFontButton字体样式复制到Label

实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:59:13