使用Pygobject的Pango属性
我有以下这段代码,是用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_new
、pango_attr_weight_new
、pango_attr_family_new
和pango_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 pango
和pango.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,但对我来说是有效的。