使用Pygobject的Pango属性

9 投票
2 回答
2412 浏览
提问于 2025-04-17 09:49

我有以下这段代码,是用pygtk写的:

attr = pango.AttrList()
attr.change(pango.AttrSize((
            50 * window_height / 100) * 1000, 0, -1))
attr.change(pango.AttrFamily("Sans", 0, -1))
attr.change(pango.AttrWeight(pango.WEIGHT_BOLD, 0, -1))
attr.change(pango.AttrForeground(65535, 65535, 65535, 0, -1))

self.label.set_attributes(attr)

我想把它移植到pygobject,但发现没有Pango.AttrFamily、Pango.AttrWeight和Pango.AttrForeground这些类(而且我也不能创建一个Pango.AttrSize的实例)。

我的问题是:如何通过反射来使用 pango_attr_size_newpango_attr_weight_newpango_attr_family_newpango_attr_foreground_new

我知道我可以用 markup 来做到这一点,但1. 使用属性会让事情更简单,2. 我想知道这里发生了什么!我已经花了很多时间在解决这个问题上。

2 个回答

1

从这封邮件中,我发现这段代码运行时没有错误:

    from gi.repository import Pango

    ren = Gtk.CellRendererText()
    ren.set_property('alignment', Pango.Alignment.RIGHT)

虽然在我的代码中,这段代码并没有让内容靠右对齐,但我可能在代码中还有其他错误。这里最重要的是,上面的代码似乎是用来处理pygtk相关内容的,比如import pangopango.ALIGN_RIGHT

这并不是对提问者的完整回答,但希望能让问题更接近解决。

2

编辑:由于方法 override_font 已经不再推荐使用,建议你使用CSS,具体可以参考这个页面 - https://developer.gnome.org/gtk3/stable/GtkWidget.html#gtk-widget-override-font

其余的内容保留是为了历史记录。

我不知道为什么那样做不行。

这里有一个方法可以实现。

def set_global_styles(self, editor_widget):
    pango_context = editor_widget.create_pango_context()
    font_description = pango_context.get_font_description()
    increase = 14 #pt 14
    font_size = 1024*increase
    font_description.set_size(font_size)
    editor_widget.override_font(font_description)

到目前为止,我找到的最简单的方法就是这个。虽然回答得晚了,但总比不回答好。

顺便提供一些关于Pango和使用上述代码的资源。虽然我不确定Pango的所有文档是否适用于gtk3,但对我来说是有效的。

设置Pango上下文的字体描述

Pango字体描述

gtk中的Pango字体

Pango布局

GtkWidget被文本编辑器等对象继承

撰写回答