猜猜我们的TreeView包含一个TreeStore,这里是我的代码:
#!/usr/bin/python
# coding=utf-8
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk
class TreeStore(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
self.set_default_size(200, 200)
self.connect("destroy", Gtk.main_quit)
mylist = ["1","2","3","4","5"]
scrolledwindow = Gtk.ScrolledWindow()
scrolledwindow.set_hexpand(True)
scrolledwindow.set_vexpand(True)
self.add(scrolledwindow)
treestore = Gtk.TreeStore(str)
ListOne = treestore.append(None, ["List One"])
ListTwo = treestore.append(None, ["List Two"])
ListThree = treestore.append(None, ["List Three"])
treeview = Gtk.TreeView()
treeview.set_model(treestore)
scrolledwindow.add(treeview)
cellrenderertext = Gtk.CellRendererText()
treeviewcolumn = Gtk.TreeViewColumn("Lists")
treeview.append_column(treeviewcolumn)
treeviewcolumn.pack_start(cellrenderertext, True)
treeviewcolumn.add_attribute(cellrenderertext, "text", 0)
for listItem in mylist:
treestore.append(ListOne, [listItem])
treestore.append(ListTwo, ["foo"])
treestore.append(ListTwo, ["Fido"])
treestore.append(ListThree, ["Spot"])
window = TreeStore()
window.show_all()
Gtk.main()
答案 0 :(得分:1)
首先,您需要获取关联的TreeSelection对象。然后,您可以使用get_selected_rows()获取指向所选项目的树路径列表。使用这些树路径来检索文本并完成。
treestore, selected_treepaths= treeview.get_selection().get_selected_rows()
selected_treepath= selected_treepaths[0] # only one row can be selected
selected_row= treestore[selected_treepath]
text= selected_row[0] # index 0 because this is a TreeStore with only one item of type str
print text
更新:要在选择更改时运行此代码,请将此代码添加到构造函数中:
class TreeStore(Gtk.Window):
def __init__(self):
...
treeview.connect('cursor-changed', self.selection_changed)
每次选择更新时都会调用此函数:
def selection_changed(self, treeview):
treestore, selected_treepaths= treeview.get_selection().get_selected_rows()
selected_treepath= selected_treepaths[0] # only one row can be selected
if len(selected_treepath)==1: # check if a toplevel node is selected
# get a TreeIter to iterate over all children
treeiter= treestore.get_iter(selected_treepath)
treeiter= treestore.iter_children(treeiter)
children= []
while treeiter:
children.append(treestore[treeiter][0]) # treestore[treeiter] gives us the row,
# [0] gives us the text in that row
treeiter= treestore.iter_next(treeiter) # move on to the next child
print ','.join(children)
else: # not a toplevel node
selected_row= treestore[selected_treepath]
text= selected_row[0] # index 0 because this is a TreeStore with only one item of type str
print text
这将检查是否选择了顶级节点(列表一,列表二,列表三),并打印出相关项目。可以找到相关文档(针对TreeIters和TreePaths)here。