python - 如何获得 GTK 中的默认颜色?

标签 python python-3.x gtk gtk3 pygobject

上下文

在 GTK 3 中,人们可以设置自己的主题。即使是默认主题 (Adwaita) 也提供了两种变体:浅色和深色。当我编写自己的小部件(在 python 中)时,我需要获取这些颜色以避免在黑色上绘制黑色或在白色上绘制白色。

问题

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


有效的方法

  • GtkSettings 用于 提供一个可接受的 gtk-theme-color 属性,但它不再存在并且在文档来解释如何替换它。
  • 我不想从另一个小部件获取那种颜色:
    • This没有用:PyGTK 不适用于 Python/GTK 3,这需要另一个小部件。
    • This会更好(至少基于 PyGObject)但是同样,thar 会要求我从另一个小部件复制样式。

为什么我不想从另一个小部件复制样式?

因为原始颜色就在某处。原则上,我不明白为什么我应该被迫间接访问它。

此外,如果您仅仅因为胆敢在某处删除单个标签而导致程序崩溃,您会作何 react ?如果更改单个标签的颜色实际上更改了其他完全不相关的小部件的颜色,您会作何 react ?

我不想要这种惊喜。

最佳答案

您不需要实例化 GTK 小部件来检索它们的 StyleContext

您可以创建一个空的 Gtk.StyleContext并设置 Gtk.WidgetPath一个小部件类。

可以使用.get_color() 检索前景颜色. 可以使用 .get_property() 检索其他颜色和样式属性.

两种方法都需要Gtk.StateFlags .

有关属性,请参阅 GTK+ CSS OverviewGTK+ 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) )

关于python - 如何获得 GTK 中的默认颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38871450/

相关文章:

python - Puppy Linux - 导入 gtk 在 Python 中抛出错误

python - Nautilus 右键单击​​菜单中的子菜单项

python - RDD.sortByKey 在 python 中使用函数?

Python - 如何覆盖 Markdown 库的输出

python - 如何将正则表达式与 pandas series.find 函数一起使用

python - 不同的实例是否共享类中声明的相同方法?

c++ - GTK+ 通过控件 id 查找 GTKWidget

python - 在 Windows 上的任务计划程序中计划并手动运行 .pyw 脚本

python - 为不同平台分发带有 C 模块的 Python 应用程序

python - 在 Flask-SQLAlchemy 中添加 __init__() 方法