可以通过使用单元格数据函数来设置一个元素的属性。由于我只在C语言中完成了这项工作,所以我只能将PyGTK文档的链接传递给您,我还没有看到PyGObject这个特性的相关文档。在
由于PyGTK是文档化的here,this页面在底部给出了一个示例,PyGTK的单元格数据函数的使用也在this文档中有所体现。在
例如,如果您希望执行与传输相同的操作,可以执行以下操作:
因为您接收当前iter作为cell data函数的参数,所以您可以遍历它的所有子元素并检查子元素的状态。然后您将知道在父节点上设置哪个状态。现在的要点是在cell data函数中设置属性只会影响这个单元格,而不会影响treeview的所有元素。在
我还可以为我自己的应用程序提供一个可视化示例:
我在这个树视图中有“Value”列。如果“Menu Element”列中的值设置为“enabled”,而“Type”列中的值为“option”,则会显示一个复选框而不是文本(我突出显示了这样一行)。示例图像还显示了一个活动的搜索,其中突出显示了搜索结果。这两种方法都可以通过单元格数据函数按您在问题中的要求设置一个元素的属性。在
编辑
我做了一些示例代码。主要的一点是,单元格属性总是为每个单元格设置的。所以不仅仅是“如果…,然后设置属性”,而是“如果,像这样设置属性,否则,设置属性那样”。(它基于旧的PyGTK文档,但是无论如何它应该澄清一些事情)。在#!/usr/bin/env python
# example basictreeview.py
import pygtk
pygtk.require('2.0')
import gtk
class BasicTreeViewExample:
def set_status(self, column, cell, model, iter):
if 'inconsistent' in model.get_value(iter, 0):
cell.set_property('inconsistent',True)
else:
cell.set_property('inconsistent',False)
return
def delete_event(self, widget, event, data=None):
gtk.main_quit()
return False
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_title("Basic TreeView Example")
self.window.set_size_request(200, 200)
self.window.connect("delete_event", self.delete_event)
self.treestore = gtk.TreeStore(str)
for parent in range(4):
piter = self.treestore.append(None, ['parent %i' % parent])
for child in range(3):
if child == 1:
self.treestore.append(piter, ['consistent'])
else:
self.treestore.append(piter, ['inconsistent'])
self.treeview = gtk.TreeView(self.treestore)
self.tvcolumn0 = gtk.TreeViewColumn('Column 0')
self.tvcolumn1 = gtk.TreeViewColumn('Column 1')
self.treeview.append_column(self.tvcolumn0)
self.treeview.append_column(self.tvcolumn1)
self.text = gtk.CellRendererText()
self.toggle = gtk.CellRendererToggle()
self.tvcolumn0.pack_start(self.text, True)
self.tvcolumn1.pack_start(self.toggle, True)
self.tvcolumn0.add_attribute(self.text, 'text', 0)
self.tvcolumn1.set_cell_data_func(self.toggle, self.set_status)
self.window.add(self.treeview)
self.window.show_all()
def main():
gtk.main()
if __name__ == "__main__":
tvexample = BasicTreeViewExample()
main()