Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用GenericTreeModel呈现自定义列_Python_Pygtk_Gtktreeview - Fatal编程技术网

Python 如何使用GenericTreeModel呈现自定义列

Python 如何使用GenericTreeModel呈现自定义列,python,pygtk,gtktreeview,Python,Pygtk,Gtktreeview,我必须在树视图中显示一些数据。“真实”的数据模型是巨大的,我无法复制树存储中的所有内容,因此我想我应该使用GenericTreeModel来充当虚拟树视图。顺便说一句,第一列是经典的图标+文本样式,我想我应该声明一个带有CellRenderPixBuf()的列,但是我不确定在获取列()上的和获取值()上的模型方法应该返回什么。对于同一列,它既是一个Pixbuf,也是一个字符串值。看,有一个示例将两个单元格渲染器打包到一列。区别在于您使用的是自定义树模型,其行为取决于您对模型的建模方式。如果有一列

我必须在树视图中显示一些数据。“真实”的数据模型是巨大的,我无法复制树存储中的所有内容,因此我想我应该使用
GenericTreeModel
来充当虚拟树视图。顺便说一句,第一列是经典的图标+文本样式,我想我应该声明一个带有CellRenderPixBuf()的列,但是我不确定在获取列()上的
和获取值()上的
模型方法应该返回什么。对于同一列,它既是一个Pixbuf,也是一个字符串值。

看,有一个示例将两个单元格渲染器打包到一列。区别在于您使用的是自定义树模型,其行为取决于您对模型的建模方式。如果有一列包含文本,一列包含pixbuf,则可以使用
设置_属性

column = gtk.TreeViewColumn('Pixbuf and text')
cell1 = gtk.CellRenderText()
cell2 = gtk.CellRenderPixbuf()
column.pack_start(cell1, True)
column.pack_start(cell2, False)
column.set_attribute(cell1, 'text', 0) # the first column contains the text
column.set_attribute(cell2, 'pixbuf', 1) # the second column contains the pixbuf
否则,您可以有一个树模型,其中只有一列包含您所需的所有对象,因此只需设置回调:

class MyObject:
    def __init__(self, text, pixbuf):
        self.text = text
        self.pixbuf = pixbuf

def cell1_cb(col, cell, model, iter):
    obj = model.get_value(iter)
    cell.set_property('text', obj.text)

def cell2_cb(col, cell, model, iter):
    obj = model.get_value(iter)
    cell.set_property('pixbuf', obj.pixbuf)

column = gtk.TreeViewColumn('Pixbuf and text')
cell1 = gtk.CellRenderText()
cell2 = gtk.CellRenderPixbuf()
column.pack_start(cell1, True)
column.pack_start(cell2, False)
column.set_cell_data_func(cell1, cell1_cb)
column.set_cell_data_func(cell2, cell2_cb)

我希望我能给你一个想法和一个起点。免责声明:我没有测试代码。

您的数据很大,是因为它有很多行,还是因为每一行都有大量数据?很多行。还有一些列,但我只需要显示其中的一些。这似乎正是我想要的(第一种情况,模型中分离的图标和文本),我今晚会查看,谢谢。好吧,我尝试了,解决方案正是教程中的一个:在树状视图后面有一个genericmodel或其他东西没有区别。非常感谢。