Show icon or color in Gtk TreeView tree

前端 未结 3 860
自闭症患者
自闭症患者 2021-01-14 15:37

I am having difficulty loading a file or displaying a colour in one of the columns of a Gtk TreeView (Python binding of GTK3). An example taken from QGIS shows a icon in the

3条回答
  •  傲寒
    傲寒 (楼主)
    2021-01-14 15:40

    Here is a complete example of how to create a tree store with icons (credit goes to Ryan Paul):

    import gi
    gi.require_version('Gtk', '3.0')
    from gi.repository import Gtk as gtk
    from gi.repository import Gdk as gdk
    from gi.repository import GdkPixbuf
    import os, stat
    
    # Instantiate the tree store and specify the data types
    store = gtk.TreeStore(str, GdkPixbuf.Pixbuf, int, bool)
    
    def dirwalk(path, parent=None):
      # Iterate over the contents of the specified path
      for f in os.listdir(path):
        # Get the absolute path of the item
        fullname = os.path.join(path, f)
        # Extract metadata from the item
        fdata = os.stat(fullname)
        # Determine if the item is a folder
        is_folder = stat.S_ISDIR(fdata.st_mode)
        # Generate an icon from the default icon theme
        img = gtk.IconTheme.get_default().load_icon(
            "folder" if is_folder else "document",
            gtk.IconSize.MENU, 0)
        # Append the item to the TreeStore
        li = store.append(parent, [f, img, fdata.st_size, is_folder])
        # If the item is a folder, descend into it
        if is_folder: dirwalk(fullname, li)
    
    dirwalk("/path/to/folder")
    
    # Create a TreeViewColumn
    col = gtk.TreeViewColumn("File")
    # Create a column cell to display text
    col_cell_text = gtk.CellRendererText()
    # Create a column cell to display an image
    col_cell_img = gtk.CellRendererPixbuf()
    # Add the cells to the column
    col.pack_start(col_cell_img, False)
    col.pack_start(col_cell_text, True)
    # Bind the text cell to column 0 of the tree's model
    col.add_attribute(col_cell_text, "text", 0)
    # Bind the image cell to column 1 of the tree's model
    col.add_attribute(col_cell_img, "pixbuf", 1)
    
    # Create the TreeView and set our data store as the model
    tree = gtk.TreeView(store)
    # Append the columns to the TreeView
    tree.append_column(col)
    
    scroll = gtk.ScrolledWindow()
    scroll.add(tree)
    
    window = gtk.Window()
    window.connect("destroy", gtk.main_quit)
    window.add(scroll)
    window.set_default_size(400,400)
    window.show_all()
    gtk.main()
    

提交回复
热议问题