我有一个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()
答案 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}}。这样,父行将无法选择。