How can I get the default colors in GTK?

后端 未结 2 1344
故里飘歌
故里飘歌 2021-02-20 00:06

Context

In GTK 3, people can set their own themes. Even the default theme (Adwaita) is provided with two variants: a light one and a dark one. As I am writing my own w

相关标签:
2条回答
  • 2021-02-20 01:05

    You don't need to instantiate GTK widgets to retrieve their StyleContext.

    You can create an empty Gtk.StyleContext and set the Gtk.WidgetPath of a widget class.

    The foreground color can be retrieved with .get_color(). Other colors and style properties can be retrieved with .get_property().

    Both methods need Gtk.StateFlags.

    For properties, see GTK+ CSS Overview and GTK+ CSS Properties.

    import gi
    gi.require_version('Gtk', '3.0')
    from gi.repository import Gtk
    
    # Create an empty style context
    style_ctx = Gtk.StyleContext();
    
    # Create an empty widget path
    widget_path =  Gtk.WidgetPath();
    
    # Specify the widget class type you want to get colors from
    widget_path.append_type(Gtk.Button);
    style_ctx.set_path(widget_path);
    
    # Print style context colors of widget class Gtk.Button
    print('Gtk.Button: Normal:')
    print('foreground color: ', style_ctx.get_color(Gtk.StateFlags.NORMAL) )
    print('color:            ', style_ctx.get_property('color', Gtk.StateFlags.NORMAL) )
    print('background color: ', style_ctx.get_property('background-color', Gtk.StateFlags.NORMAL) )
    print('outline color:    ', style_ctx.get_property('outline-color', Gtk.StateFlags.NORMAL) )
    
    print('Gtk.Button: Link:')
    print('foreground color: ', style_ctx.get_color(Gtk.StateFlags.LINK) )
    print('color:            ', style_ctx.get_property('color', Gtk.StateFlags.LINK) )
    print('background color: ', style_ctx.get_property('background-color', Gtk.StateFlags.LINK) )
    print('outline color:    ', style_ctx.get_property('outline-color', Gtk.StateFlags.LINK) )
    
    0 讨论(0)
  • 2021-02-20 01:09

    In your widget's do_draw() implementation, you can read out the theme colors from the widget's style context. For this you use methods such as self.get_style_context().get_color(), ...get_border_color(), ...get_background_color().

    0 讨论(0)
提交回复
热议问题