2024-10-02 22:29:53 发布
网友
假设我有一个TreeView(有一个支持树)来表示产品列表。在
产品具有以下规格:
另外,每个产品都有一个组成它的组件的列表。 我想显示树的子节点中组件的数据(因此,基本上,它将是一个2级的treeview),但是顶层节点将有一个不同的模型子节点。在
如何使用Glade(或者如果必要的话,通过Python+PyGObjecy)来实现呢?在
每个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()
桂.格拉德:
代码也可以在:https://gist.github.com/carlos-jenkins/5555283
每个TreeView只能有一个模型,但是可以创建一个实际上是两个(或更多)模型粘在一起的模型,并添加一些布尔列来控制该行应该显示哪个模型。然后,添加一组cellRenderer并将其可见性映射到这些控制列。在
这样做的困难在于当您希望列的名称显示在顶部时,在这种情况下,很难对信息排序。如果你能线框你希望树看起来像我可以提供一个基本的例子实现。在
==编辑==
这是一个例子:
主.py:
桂.格拉德:
^{pr2}$代码也可以在:https://gist.github.com/carlos-jenkins/5555283
相关问题 更多 >
编程相关推荐