Используйте Gtk.ComboBox с Gtk.TreeStore в PyGObject - PullRequest
0 голосов
/ 09 февраля 2019

Я хотел бы иметь Gtk.ComboBox с элементами, отображаемыми в виде дерева.Это означает, что некоторые строки должны иметь отступ в зависимости от уровня в дереве.

Когда я интерпретирую документацию правильно, это должно быть возможно с использованием Gtk.TreeStore в качестве структуры данных (модель) вот контроль.

Может быть, я неправильно истолковываю документ и невозможно использовать Gtk.TreeStore с ним?

Но в моем примере это не работает.У меня есть опыт работы с Gtk.TreeStore и Gtk.TreeView.

Пример кода

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class MyWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)

        # The Model
        store = Gtk.TreeStore(int, str)
        # first item in the row is an internal ID that should not
        # be displayed in the combo box
        it = store.append(parent=None, row=[1, "Eins"])
        it = store.append(parent=it, row=[2, "Zwei"])
        it = store.append(parent=it, row=[3, "Drei"])

        # expected result
        # Eins
        # |- Zwei
        #  |- Drei

        # The View
        combo = Gtk.ComboBox.new_with_model(store)
        renderer = Gtk.CellRendererText()
        combo.pack_start(renderer, False)
        combo.add_attribute(renderer, "text", 1)

        box = Gtk.VBox()
        box.add(combo)
        self.add(box)

if __name__ == '__main__':
    window = MyWindow()
    window.show_all()
    Gtk.main()

Визуальный пример enter image description here

1 Ответ

0 голосов
/ 17 февраля 2019

Ответ, что невозможно использовать Gtk.ComboBox с Gtk.TreeStore подобной структурой данных внутри.

Существует только обходной путь с отступами.

...