在 PyGObject 中使用 Gtk.ComboBox 和 Gtk.TreeStore
Use Gtk.ComboBox with a Gtk.TreeStore in PyGObject
我想要一个 Gtk.ComboBox
元素像树一样显示的元素。这意味着某些行应该根据树中的级别进行缩进。
当我解释 documentation 正确时,应该可以使用 Gtk.TreeStore
作为控件背后的数据结构(模型)。
也许我误解了 docu 并且无法使用 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()
视觉示例
答案是不可能将 Gtk.ComboBox
与内部的 Gtk.TreeStore
之类的数据结构一起使用。
只有缩进的解决方法。
我想要一个 Gtk.ComboBox
元素像树一样显示的元素。这意味着某些行应该根据树中的级别进行缩进。
当我解释 documentation 正确时,应该可以使用 Gtk.TreeStore
作为控件背后的数据结构(模型)。
也许我误解了 docu 并且无法使用 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()
视觉示例
答案是不可能将 Gtk.ComboBox
与内部的 Gtk.TreeStore
之类的数据结构一起使用。
只有缩进的解决方法。