首页 > 解决方案 > 使用 Gtk3 FontChooserDialog 作为 GtkCssProvider 的输入

问题描述

我正在尝试更新我最初为 Gtk3.10 编写的一些旧 Gtk 代码。现在我正在运行 3.24.29 抱怨:

主题解析错误::1:29:使用 Pango 语法作为字体:样式属性已弃用;请使用 CSS 语法

有问题的部分是我调用gtk_css_provider_load_from_data()并传递了一个 CSS 字符串GtkButton {font: Noto Sans 12;}。我知道新的写法是button {font-family: Noto Sans; font-size: 12pt;}.

挑战在于我没有静态指定字体。用户可以在运行时使用GtkFontChooserDialog选择字体。

阅读文档,我认为gtk_font_chooser_get_font_features()会做我想做的,因为它说The selected font features, in a format that is compatible with CSS and with Pango attributes.但是相反,它返回一个空字符串。

这是一个可运行的示例,显示了我的位置:

#!/usr/bin/perl -w
use strict;
use Gtk3 -init;
my $win = Gtk3::Window->new;
$win->signal_connect(destroy => sub {Gtk3::main_quit});
my $btn = Gtk3::Button->new_with_label("Choose font");
my $style = $btn->get_style_context;
my $cssProv = Gtk3::CssProvider->new;
$style->add_provider($cssProv, 800);
$btn->signal_connect(clicked => sub {
        my $dialog = Gtk3::FontChooserDialog->new;
        if ($dialog->run eq 'ok') {
                # What I thought would work by reading GtkFontChooser docs
                #$cssProv->load_from_data("button {" . $dialog->get_font_features . "}");
               
                # Sanity check: ignore dialog and make button huge
                $cssProv->load_from_data("button {font-family: Segoe Script; font-size: 48pt;}");
        }
        $dialog->destroy;
});
$win->add($btn);
$win->show_all;
Gtk3->main;

当我用 Perl 编写时,其他语言的示例或指针受到赞赏。

标签: cssgtk3pango

解决方案


推荐阅读