GTK3 ComboBox显示TreeStore中的父项

时间:2012-04-02 20:37:35

标签: python combobox gtk gtk3

我有一个TreeStore将项目分组为父行。然后可以从ComboBox中选择Treestore中的项目。

Imgur

用户不应该选择父项,但GTK会在每个级联部分的子项上面放置一个可选条目。

我尝试使用set_row_separator_func()来隐藏父行,但它隐藏了扩展菜单条目以及可选择的购物车。

ComboBox是使用此代码创建的,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()

1 个答案:

答案 0 :(得分: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设置为{{1}}。这样,父行将无法选择。