2016-12-01 68 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