7

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

4

1 回答 1

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)>)

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

于 2011-07-17T03:13:19.197 回答