在PyGObject中将Gtk.ComboBox与Gtk.TreeStore一起使用

时间:2019-02-09 15:15:41

标签: python-3.x combobox gtk pygtk pygobject

我希望有一个Gtk.ComboBox,其元素像树一样显示。这意味着某些行应根据树中的级别缩进。

当我解释documentation正确时,应该可以使用Gtk.TreeStore作为控件后面的数据结构(模型)。

也许我会误解文档,并且无法将Gtk.TreeStore与文档一起使用?

但是在我的示例中它不起作用。我有Gtk.TreeStoreGtk.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 :(得分:0)

回答说,不可能在内部使用像Gtk.ComboBox这样的数据结构的Gtk.TreeStore

只有缩进的解决方法。