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