带有 pygobject 的 pango 属性

Posted

技术标签:

【中文标题】带有 pygobject 的 pango 属性【英文标题】:pango attributes with pygobject 【发布时间】:2012-02-05 16:58:45 【问题描述】:

我有以下使用 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. 我想知道这里发生了什么!我已经花了很多时间试图解决它。

【问题讨论】:

你在这方面有什么收获吗?我也遇到了同样的问题。 FIY,这是相关问题:bugzilla.gnome.org/show_bug.cgi?id=646788(自 2014 年以来未更改) 此问题尚未修复。但是你可以通过使用新的 CSS 系统来解决它:#mylabel color:blabla; etc;,设置self.label.set_name("mylabel"),然后导入 CSS 文件Gtk.CssProvider.load_from_file(Gtk.CssProvider_get_default(), file) 【参考方案1】:

编辑:由于不推荐使用 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 context set font description

Pango font description

Pango fonts in gtk

Pango layout

GtkWidget inherited by text editors 以及其他对象。

【讨论】:

不要使用此代码。 override_font 已被弃用。 developer.gnome.org/gtk3/stable/…【参考方案2】:

从这个mail我发现这个运行没有运行时错误:

    from gi.repository import Pango

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

虽然在我的代码中这并没有使内容向右对齐,但我的代码中可能还有另一个错误。这里最重要的是,上面的代码似乎是 pygtk 东西的翻译,比如import pango 和:pango.ALIGN_RIGHT

这不是 OP 的完整答案,但希望更近一步。

【讨论】:

以上是关于带有 pygobject 的 pango 属性的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pycairo 创建字母间距属性?

Pango 颜色字形

用 pygobject 编写 D-Bus 服务?

PyGObject GTK+ 3 - 文档?

Windows 上的 PyGObject

将文件中的字体加载到pango?