如何在GTK中获取默认颜色?

14

背景

在GTK 3中,人们可以设置自己的主题。甚至默认主题(Adwaita)也提供了两种变体:明亮和暗黑。因为我正在编写自己的小部件(使用Python),所以需要获取这些颜色,以避免黑色绘制在黑色或白色绘制在白色的情况。

问题

如何访问用户GTK主题的默认颜色?


不起作用的方法

  • GtkSettings曾经提供可接受的gtk-theme-color属性,但现在已经没有了,在文档中也没有任何参考说明如何替换它。
  • 我不想从另一个小部件中获取该颜色:
    • 没有用: PyGTK无法与Python/GTK 3配合使用,而且还需要另一个小部件。
    • 会更好(至少基于PyGObject),但这还需要我从另一个小部件复制样式。

为什么我不想从其他小部件中复制样式?

因为原始颜色就在那里。从原始来源获取是最好的选择。

此外,如果您因为敢于在某个地方删除单个标签而导致程序崩溃,你会怎么反应?如果更改单个标签的颜色实际上更改了其他完全无关的小部件的颜色,你会怎么反应?

我不想遇到这种意外。

2个回答

8
您无需实例化GTK小部件即可检索它们的StyleContext
您可以创建一个空的Gtk.StyleContext并设置小部件类的Gtk.WidgetPath
前景色可以使用.get_color()检索。 其他颜色和样式属性可以使用.get_property()检索。
这两种方法都需要Gtk.StateFlags
对于属性,请参见GTK+ CSS概述GTK+ CSS属性
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) )

3
在你的小部件的do_draw()实现中,你可以从小部件的样式上下文中读取主题颜色。为此,你可以使用诸如self.get_style_context().get_color()...get_border_color()...get_background_color()等方法。

升高的颜色怎么办? - kamathln

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接