2012-04-02 60 views
1

父項目我有一個TreeStore該組物品進入父行。然後可以從ComboBox中選擇Treestore中的項目。GTK3組合框顯示從TreeStore

Imgur

用戶不應該能夠選擇父項目,但GTK把每個級聯節高於其子女的可選條目。

我一直在使用set_row_separator_func()來隱藏父行嘗試,但它隱藏了擴展菜單項以及可選擇的車。

組合框與此代碼中創建,並self.ObjectsList顯示在圖像左側:

self.gcombo = Gtk.ComboBox.new_with_model(self.objectsList) 
renderer_text = Gtk.CellRendererText() 
self.gcombo.pack_start(renderer_text, True) 
self.gcombo.add_attribute(renderer_text, "text", 0) 
self.gcombo.show() 
+0

顯示一些代碼? – ptomato 2012-04-03 08:14:35

+0

不知道我可以添加哪些代碼,就我所見,它只是一個標準的TreeStore和ComboBox。無論如何,我粘貼了組合框代碼 – UbunTom 2012-04-03 12:26:43

回答

3

下面是一個示例程序,你想要做什麼:

from gi.repository import Gtk 

objectsList = Gtk.TreeStore(str, bool) 

for i in range(2): 
    parent = objectsList.append(None, ['Parent {}'.format(i), False]) 
    for j in range(2): 
     objectsList.append(parent, ['Child {}'.format(j), True]) 

gcombo = Gtk.ComboBox.new_with_model(objectsList) 
renderer_text = Gtk.CellRendererText() 
gcombo.pack_start(renderer_text, True) 
gcombo.add_attribute(renderer_text, "text", 0) 
gcombo.add_attribute(renderer_text, 'sensitive', 1) 
gcombo.show() 

win = Gtk.Window() 
win.add(gcombo) 
win.show_all() 
win.connect('destroy', Gtk.main_quit) 

Gtk.main() 

你在父行中將渲染器的sensitive屬性設置爲False,並在子行中設置True。這樣,父行將不可選擇。