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

Mea*_*EYE 7 python gtk gobject introspection colors

随着GObject内省的引入,通过widget.get_style()方法访问主题颜色的方式消失了.我感兴趣的是当通过GOBject内省使用GTK +时如何获得主题颜色.该解决方案应该优选地适用于两个版本(2和3),但是对于每个版本的解决方案也是可接受的.

Jam*_*ord 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')
Run Code Online (Sandbox Code Playgroud)

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

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

(False, <Gdk.Color(red=0, green=0, blue=0)>)
Run Code Online (Sandbox Code Playgroud)

编辑:回头看看,我认为上面仍然提供正确的信息.未找到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')
Run Code Online (Sandbox Code Playgroud)

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

(True, <Gdk.Color(red=0.000000, green=0.000000, blue=0.000000, alpha=1.000000)>)
Run Code Online (Sandbox Code Playgroud)

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

  • 非常感谢...我一直在努力寻找这个. (2认同)