2016-12-01 72 views
1

我在从系统Gtk3主题css(gtk.css)获取某些属性以在我的python Gtk3应用程序中呈现上下文组件时遇到问题。从python获取gtk主题css属性Gtk3

我从我的系统主题gtk.css有什么如下:

entry { 
    ... 
    color: #5c616c; 
    border-color: #cfd6e6; 
    background-color: #ffffff; } 
    entry:focus { 
    background-clip: border-box; 
    color: #5c616c; 
    border-color: #5294e2; 
    background-color: #ffffff; } 
    entry:disabled { 
    color: rgba(92, 97, 108, 0.55); 
    border-color: rgba(207, 214, 230, 0.55); 
    background-color: rgba(255, 255, 255, 0.55); } 
    entry.warning { 
    color: white; 
    border-color: #F27835; 
    background-color: #f7ae86; } 
    entry.warning image { 
     color: white; } 
... 

我想从它那里得到那些背景颜色,例如background-colorentry.warning

我已经做了一些研究,这里是我卡住:

css_provider = Gtk.CssProvider.get_default() 
warning_color = css_provider.get_style(something to put here) 

你的帮助非常感谢!

回答

3

正确的方法是修改Gtk.WidgetGtk.StyleContext以便CSS规则适用于它,然后使用Gtk.render_whatever()函数绘制您的上下文组件。

例如渲染具有相同风格为背景warningGtk.Entry子类背景:

context = my_entry.get_style_context() 
context.save() 
context.add_class('warning') 
Gtk.render_background(context, blah, blah, blah) 
context.restore() 

请注意,这不是可以从CSS获得背景色直接。 CSS背景可以是颜色,图像或渐变。

+0

非常感谢。我的后续问题是,我想在文本视图小部件中使用上下文颜色作为文本颜色(标签),并且我没有必要拥有实际的入口对象。 –

+0

就像我说的,你不能可靠地获取背景颜色,因为可能没有特定窗口小部件的“背景颜色”。你可以通过'context.get_property()'获得一些样式。 – ptomato