【问题标题】:Can I add a column to an existing treemodel in gtk?我可以在 gtk 中的现有树模型中添加一列吗?
【发布时间】:2012-01-19 17:24:28
【问题描述】:

我有一个从树模型填充的树视图。

我想在树视图中添加一个列。是否可以从单独的树模型中为该列绘制数据,或者我可以在运行时将列附加到现有树模型?

【问题讨论】:

    标签: python gtk pygtk gtktreeview


    【解决方案1】:

    您可以根据需要将任意数量的列附加到树视图,而不受模型列的限制。如果模型中不存在您需要的数据,您可以为列设置回调:

    import gtk
    
    
    def inIta(col, cell, model, iter, mymodel):
        s = model.get_string_from_iter(iter)
        niter = mymodel.get_iter_from_string(s)
        obj = mymodel.get_value(niter, 0)
        cell.set_property('text', obj)
    
    
    model = gtk.ListStore(str)
    model2 = gtk.ListStore(str)
    view = gtk.TreeView(model)
    rend1 = gtk.CellRendererText()
    col1 = gtk.TreeViewColumn('hello', rend1, text=0)
    view.append_column(col1)
    rend2 = gtk.CellRendererText()
    col2 = gtk.TreeViewColumn('ciao', rend2)
    col2.set_cell_data_func(rend2, inIta, model2)
    view.append_column(col2)
    
    model.append(['hello world'])
    model2.append(['ciao mondo'])
    
    win = gtk.Window()
    win.connect('delete_event', gtk.main_quit)
    win.add(view)
    win.show_all()
    gtk.main()
    

    【讨论】:

    • 谢谢,这正是我所需要的。遗憾的是,您无法在 gtk 中本地定义模型和树视图之间的一对多和多对一关系。我原以为这会使它在表示数据库信息方面更有用。
    • 我认为有一些库是建立在 gtk 之上的,kiwi 是其中之一,但我认为还有一个更具体的在数据库之上构建接口。
    【解决方案2】:

    gtk.TreeView 对象中有一个append_column 方法,所以是的,您可以以编程方式将一列添加到gtk.TreeView

    但是,我不知道有任何方法可以将新列添加到现有模型或为同一 gtk.TreeView 使用多个模型。无论如何,我想您可以创建一个带有额外列的新模型,复制前一个的内容并更新树视图以使用新模型。

    【讨论】:

      【解决方案3】:

      回答标题中的问题:不,您不能在创建 GtkTreeModel 后向其添加列。

      【讨论】:

        猜你喜欢
        • 2020-04-20
        • 2016-10-29
        • 2018-07-17
        • 2021-01-20
        • 2016-08-14
        • 2015-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多