PyGtk:从双列表形成一个 TreeStore
PyGtk: Forming a a TreeStore from a double list
我正在尝试使用 PyGtk 从双列表创建树存储。我就是这样做的。
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_size_request(400, 300)
self.set_position(gtk.WIN_POS_CENTER)
self.connect("destroy", gtk.main_quit)
self.set_title("Tree")
tree = gtk.TreeView()
languages = gtk.TreeViewColumn()
languages.set_title("Files")
cell = gtk.CellRendererText()
languages.pack_start(cell, True)
languages.add_attribute(cell, "text", 0)
treestore = gtk.TreeStore(str)
doubleL = [['123', 'user1', 'Thisone' 'its.zip'],
['Kafueta', 'user1', 'zippedtto.zip'],
['Mohm', 'user1', 'zippedtto.zip'],
['Hom', 'user2', 'Iam.zip'],
['abcd', 'test', 'Letsee.zip']]
for lis in doubleL:
par = treestore.append(None, [lis[0]])
two = treestore.append(par, [lis[1]])
treestore.append(two, [lis[2]])
tree.append_column(languages)
tree.set_model(treestore)
self.add(tree)
self.show_all()
这会生成一个可以在 GUI 上显示的树存储,如下所示。但是正如您所看到的,如果我有一个包含更多元素的列表,这不是很有效。
这个 for 循环可能很长:
for lis in doubleL:
par = treestore.append(None, [lis[0]])
two = treestore.append(par, [lis[1]])
treestore.append(two, [lis[2]]
有没有更有效的方法可以在上面的for循环中使用来创建树?
这看起来是 reduce()
的完美案例:
reduce(lambda x, y: treestore.append(x, [lis[y]]), range(len(lis)), None)
在 reduce 中,上述 lambda 中的 x
本质上是嵌套在前一个中,因此在您的情况下等同于以下内容。
treestore.append(treestore.append(treestore.append(None, [lis[0]]), [lis[1]]), [lis[2]])
我正在尝试使用 PyGtk 从双列表创建树存储。我就是这样做的。
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_size_request(400, 300)
self.set_position(gtk.WIN_POS_CENTER)
self.connect("destroy", gtk.main_quit)
self.set_title("Tree")
tree = gtk.TreeView()
languages = gtk.TreeViewColumn()
languages.set_title("Files")
cell = gtk.CellRendererText()
languages.pack_start(cell, True)
languages.add_attribute(cell, "text", 0)
treestore = gtk.TreeStore(str)
doubleL = [['123', 'user1', 'Thisone' 'its.zip'],
['Kafueta', 'user1', 'zippedtto.zip'],
['Mohm', 'user1', 'zippedtto.zip'],
['Hom', 'user2', 'Iam.zip'],
['abcd', 'test', 'Letsee.zip']]
for lis in doubleL:
par = treestore.append(None, [lis[0]])
two = treestore.append(par, [lis[1]])
treestore.append(two, [lis[2]])
tree.append_column(languages)
tree.set_model(treestore)
self.add(tree)
self.show_all()
这会生成一个可以在 GUI 上显示的树存储,如下所示。但是正如您所看到的,如果我有一个包含更多元素的列表,这不是很有效。 这个 for 循环可能很长:
for lis in doubleL:
par = treestore.append(None, [lis[0]])
two = treestore.append(par, [lis[1]])
treestore.append(two, [lis[2]]
有没有更有效的方法可以在上面的for循环中使用来创建树?
这看起来是 reduce()
的完美案例:
reduce(lambda x, y: treestore.append(x, [lis[y]]), range(len(lis)), None)
在 reduce 中,上述 lambda 中的 x
本质上是嵌套在前一个中,因此在您的情况下等同于以下内容。
treestore.append(treestore.append(treestore.append(None, [lis[0]]), [lis[1]]), [lis[2]])