使用python和GObject内省获得GTK +主题颜色

时间:2011-06-28 00:54:52

标签: python colors gtk introspection gobject

通过引入GObject内省,通过widget.get_style()方法访问主题颜色的方法已经消失。我感兴趣的是当通过GOBject内省使用GTK +时如何获得主题颜色。该解决方案最好适用于两个版本(2和3),但每个版本的解决方案也是可以接受的。

1 个答案:

答案 0 :(得分:6)

我不知道如何从gtk + -2.0获得它,除非你使用纯粹的gtk + -2.0环境,在这种情况下我认为旧的GtkStyle方法有效。例如,假设你没有像gnome-shell那样运行Gtk-3.0环境

import gi
# make sure you use gtk+-2.0
gi.require_version('Gtk', '2.0')
from gi.repository import Gtk

window = Gtk.Window()

...

style = window.get_style()
print style.lookup_color('fg_color')

我认为应该仍然可以在gtk + -2.0环境下工作。我不确定,因为我的系统正在运行gnome-shell,并且不能轻易尝试这个。

但是,此方法已被弃用,并被GtkStyleContext取代。如果我在像gnome-shell这样的gtk + -3.0环境中使用上面的代码,它会运行,但不会给我我所追求的信息。我得到的是

(False, <Gdk.Color(red=0, green=0, blue=0)>)

编辑:回头看看,我认为上面仍然给出了正确的信息。未找到fg_color的颜色,如元组结果中的第一个条目所示,即False。此外,窗口必须可见才能找到颜色。

如果我想要颜色信息,我想使用新的GtkStyleContext,例如

import gi
# make sure you use gtk+-3.0
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

window = Gtk.Window()

...

style_context = window.get_style_context()
print style_context.lookup_color('fg_color')

这会给我一些真实的数据,这告诉我'fg_color'已被找到,因为元组中的第一个条目是True。

(True, <Gdk.Color(red=0.000000, green=0.000000, blue=0.000000, alpha=1.000000)>)

我希望这能回答你的问题。