2012-01-27 50 views
3

我正在嘗試更改樹視圖的交替背景顏色。我知道這通常應該留給主題,但我想重寫以測試gtk樣式功能。根據樹視圖文檔here,我瞭解到TreeView有幾種只讀的樣式選項,包括「偶行顏色」,「奇數行顏色」和「允許規則」(根據文檔,允許繪製偶數和奇數行顏色)。而且我知道爲了覆蓋這些只讀設置,我必須在gtkrc樣式的文件或字符串中更改樣式。如何更改pygtk中gtk.TreeView的交替背景行顏色?

所以我對一個TreeView字符串看起來像:

gtk.rc_parse_string(""" 
     style "custom-treestyle"{ 
      GtkTreeView::odd-row-color = "#00CBFF" 
      GtkTreeView::even-row-color = "#90EE90" 
      GtkTreeView::allow-rules = 1 
     } 
     widget "*custom_treeview*" style "custom-treestyle" 
    """) 
    treeview.set_name("custom_treeview") 

此分析沒有錯誤,其結果是,偶數行的顏色被應用到偶數和奇數行。

編輯:我從一些更多的測試發現,我的解析字符串必須從其他一些樣式設置中覆蓋。

print treeview.style_get_property('allow-rules') 
print treeview.style_get_property('odd-row-color') 
print treeview.style_get_property('even-row-color') 

給出結果:

True 
None 
None 

裏面全是默認設置。通常我會認爲它根本不解析字符串並設置適當的值,但在這種情況下,背景顏色確實將更改爲我指定的顏色(僅將每行背景塗成一種顏色)。

我在做什麼錯?

回答

4

我終於想出了這個造型方法的問題。 「允許規則」樣式屬性不是唯一的屬性,它告訴樹視圖以交替顏色對行進行着色。根據文檔,treeview有另一個屬性,暗示引擎它應該以交替顏色繪製行。 'True-Hint'屬性默認爲False,True成功爲我的TreeView着色成奇數/偶數行顏色!

所以,在代碼中,這一行添加到代碼中的問題:

treeview.set_rules_hint(True) 

就是這樣,用彩色的交替行一個TreeView!