GTK3 ComboBox показывает родительские элементы из TreeStore - PullRequest
1 голос
/ 03 апреля 2012

У меня есть TreeStore, который группирует элементы в родительские строки.Затем элементы из Treestore можно выбирать из ComboBox.

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 Ответ

3 голосов
/ 03 апреля 2012

Вот пример программы, которая делает то, что вы хотите:

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 в дочерних строках.Таким образом, родительские строки не будут доступны для выбора.

...