python - 使用 python 和 GObject 自省(introspection)获取 GTK+ 主题颜色

标签 python colors gtk introspection gobject

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

最佳答案

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

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

关于python - 使用 python 和 GObject 自省(introspection)获取 GTK+ 主题颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6500525/

相关文章:

colors - 在运行时更改文本颜色(Unity)?

python - 如何从 Python 向 GTK 的 "recently used"文件列表中添加一个项目?

python - 如何使用 unittest 从测试或设置中停止所有测试?

python - ConfigParser 和带有环境变量的字符串插值

python - 在运行时单击时如何更改按钮的颜色?

svn - 根据 svn 状态为文件名着色

c - 如何安装 GTK+ 及其所有依赖项?

c - 如何从对话框中获取文本?

python - 无法在 python 中导入 tensorfflow

python - Vector2 乘法导致 python 中的段错误