1

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

伊姆古尔

用户不应该能够选择父项,但是 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()
4

1 回答 1

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子行中。这样,父行将无法选择。

于 2012-04-03T15:33:11.193 回答