【问题标题】:Get GTK+ theme colors with python and GObject introspection使用 python 和 GObject 内省获取 GTK+ 主题颜色
【发布时间】:2011-09-23 22:31:25
【问题描述】:

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

【问题讨论】:

    标签: python colors gtk introspection gobject


    【解决方案1】:

    我不确定如何从 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)>)
    

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

    【讨论】:

    • 非常感谢...我一直在努力寻找这个。
    • 在哪里可以引用颜色名称(如 fg_color)?显然我的系统上没有 bg_c​​olor 或 fg_color!
    • @ThorSummoner 我无法直接回答您的问题。以上应该可以工作,但如果您的系统没有这些颜色定义,它就无法工作。从 gnome-shell 开始,我们开始使用 css 来设置小部件的样式。我一直在寻找定义,我想出的最接近的是github.com/GNOME/gtk/blob/…,但我怀疑这会对你有所帮助。尝试提问
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2014-06-04
    • 1970-01-01
    相关资源
    最近更新 更多