2011-10-08 48 views
0

我想更改gtk.IconView選擇框的不透明度或顏色(我希望實際上使選擇更清晰可見)。如何控制gtk.IconView中的選擇?

我注意到gtk.IconView小部件的樣式屬性爲selection-box-alpha & selection-box-color但只能讀取。

gtk.TreeSelection類的set_select_function()方法將是有益的做我想做什麼,但它是用於gtk.TreeView,我還沒有發現gtk.IconView

所以等效,我該怎麼做才能擁有控制權選擇並在用戶選擇或取消選擇時執行操作?

編輯: 實際上,更改selection-box-alphaselection-box-color樣式屬性的值不會是解決方案。 我真的不想改變選擇框的不透明度,但pixbuf的「不透明度」(通過合成顏色)。 因此,我需要一個set_select_function的等效方法,用於gtk.IconView小部件。

+1

也許這個問題是有關:http://stackoverflow.com/questions/2536825/how-to-set-get-gtk-style-properties –

+0

沒有,因爲這些屬性是隻讀的,並且會如果我能寫他們,這是有用的。 –

+0

如果我理解正確,那裏的答案說你可以使用'gtk_rc_parse'函數修改它們。 –

回答

1

事實上,我們需要gtk.CellRendererPixbuf具有follow-state財產

更換gtk.IconView的默認單元格渲染我們使用gtk.CellLayoutgtk.IconView繼承替換默認單元格渲染器。

model = gtk.ListStore(gobject.TYPE_STRING, gtk.gdk.Pixbuf, gobject.TYPE_STRING) 
iconview = gtk.IconView(model) 

renderer = gtk.CellRendererPixbuf() 
renderer.set_property('follow-state', True) 
iconview.pack_start(renderer) 
iconview.set_attributes(renderer,pixbuf=1) #pixbuf is the column number corresponding to the pixbuf to render in the model 
1

您可以通過實現自定義gtk.CellRenderer來設置像素圖不透明度,該自定義gtk.CellRenderer根據選擇狀態繪製像素圖,並用您自己的替換gtk.IconView的默認單元格渲染器。

+0

哦,是的,'gtk.CellRendererPixbuf'小部件有一個'follow-state'屬性,它的'gtk.CELL_RENDERER_SELECTED'常量。我會看到我可以做什麼。謝謝 –

+0

我無法弄清楚如何替換'gtk.IconView'的默認單元格渲染器。創建自定義的'gtk.CellRenderer'在[PyGTK FAQ](http://faq.pygtk.org/index.py?req=show&file=faq13.045.htp)中有解釋。 如果我理解正確,我需要在'gtk.ListStore'(而不是gtk.gdk.Pixbuf?)中使用我自定義的'gtk.CellRenderer',但我不知道如何以及我沒有找到任何示例)。 你有什麼例子嗎? –

+0

我終於找到了答案...很簡單。我會把它作爲一個新的答案發布。 –