不同级别树视图节点的不同模型

2024-10-02 22:29:53 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个TreeView(有一个支持树)来表示产品列表。在

产品具有以下规格:

  1. 姓名
  2. 产品目录号
  3. 评论

另外,每个产品都有一个组成它的组件的列表。 我想显示树的子节点中组件的数据(因此,基本上,它将是一个2级的treeview),但是顶层节点将有一个不同的模型子节点。在

如何使用Glade(或者如果必要的话,通过Python+PyGObjecy)来实现呢?在


Tags: 数据模型列表节点产品评论组件姓名
1条回答
网友
1楼 · 发布于 2024-10-02 22:29:53

每个TreeView只能有一个模型,但是可以创建一个实际上是两个(或更多)模型粘在一起的模型,并添加一些布尔列来控制该行应该显示哪个模型。然后,添加一组cellRenderer并将其可见性映射到这些控制列。在

这样做的困难在于当您希望列的名称显示在顶部时,在这种情况下,很难对信息排序。如果你能线框你希望树看起来像我可以提供一个基本的例子实现。在

==编辑==

这是一个例子:

主.py

from gi.repository import Gtk
from os.path import abspath, dirname, join

WHERE_AM_I = abspath(dirname(__file__))

# My Model map
mm = {
    'name'        : 0,
    'catalog_num' : 1,
    'comment'     : 2,
    'component'   : 3,
    'is_top'      : 4,
    'is_child'    : 5,
}

class MyApp(object):

    def __init__(self):
        """
        Build GUI
        """

        # Build GUI from Glade file
        self.builder = Gtk.Builder()
        self.glade_file = join(WHERE_AM_I, 'gui.glade')
        self.builder.add_from_file(self.glade_file)

        # Get objects
        go = self.builder.get_object
        self.window = go('window')
        self.treestore = go('treestore')

        # Fill model
        self._load_model()

        # Connect signals
        self.builder.connect_signals(self)
        self.window.connect('delete-event', lambda x,y: Gtk.main_quit())

        # Everything is ready
        self.window.show()


    def _load_model(self):

        my_data = [
                ['Cheese', 'F001', 'This is the best cheese ever!', '', True, False],
                ['Pepperoni', 'F002', 'Delicious pepperoni :}', '', True, False],
                ['Pepperonni Pizza', 'P001', 'Yes, I\'m hungry :(', '', True, False],
                ['', '', None, 'Cheese', False, True],
                ['', '', None, 'Pepperonni', False, True],
            ]

        parent = None
        for i in my_data:
            if i[mm['is_child']]:
                self.treestore.append(parent, i)
            else:
                parent = self.treestore.append(None, i)


if __name__ == '__main__':
    gui = MyApp()
    Gtk.main()

桂.格拉德

^{pr2}$

代码也可以在:https://gist.github.com/carlos-jenkins/5555283

相关问题 更多 >