如何使用GtkStyleContext获取窗口小部件的Gtk3选择颜色

时间:2012-10-20 23:01:05

标签: python gtk gio

我正在尝试在python中获取Gtk3 IconView的选择颜色,但我很困惑如何解释现有的C ++文档以及它与Python的关系。

我目前的python代码如下:

color = self.iconview.get_style().bg[Gtk.StateType.SELECTED]

这在Ubuntu 12.04中运行正常 - 我认为Gnome / Gtk 3.2。

但是,此处的文档说自{3.0}以来已弃用get_style

在使用最新GTK的Ubuntu 12.10中,上面不起作用 - 我收到错误:

CRITICAL **: StackOverflow protection.  Can't copy array element into GIArgument

该文件说我应该使用GtkStyleContext - 但是怎么做?

有人能给我一个具体的python示例吗?

2 个答案:

答案 0 :(得分:2)

在C:

GdkRGBA color;
GtkStyleContext *style =
    gtk_widget_get_style_context(iconview);
gtk_style_context_get_background_color
    (style, GTK_STATE_FLAG_SELECTED, &color);

fossfreedom的Python翻译:

context = self.iconview.get_style_context()
color = context.get_background_color(Gtk.StateFlags.SELECTED)

看来gtk2中的GtkStyle结构只是被gtk3中更现代的GtkStyleContext类所取代

答案 1 :(得分:0)

新答案是“你没有”。不一定有一种背景颜色。

根据https://developer.gnome.org/gtk3/stable/GtkStyleContext.html#gtk-style-context-get-background-color的文档:

“这个函数远没有它看起来那么有用,它不应该用在新编写的代码中.CSS没有”背景颜色“的概念,因为背景可以是图像,渐变,或任何其他图案包括纯色。“