【问题标题】:Add more than one icon in a treeview field with python 3 and tkinter使用 python 3 和 tkinter 在树视图字段中添加多个图标
【发布时间】:2020-02-17 07:49:59
【问题描述】:

我知道如何使用 tags 关键字在 #0 列中添加图标:

icon = ImageTk.PhotoImage(Image.open('path/to/icon.gif')
myTreeView.tag_configure('tag_with_this_icon', image=icon)

# some loop
myTreeView.insert( [...],tags='tag_with_this_icon')

我需要添加一个附加图标,或者在树视图的任何其他列中添加一个图标,tkinter 可以吗?

或者我是否需要在同一个图标文件中使用两个图标来调整我的图标 gif 文件(所有可能的排列)

或者在第一个树视图的左侧用一列/空文本 jsu 为第二个图标添加另一个树视图? 似乎是一个糟糕的黑客...任何更好的想法表示赞赏,谢谢。

【问题讨论】:

    标签: python-3.x tkinter treeview icons


    【解决方案1】:

    一种方法是使用 GTK3 而不是 tkinter,下面是一个有效的示例。 OP 要求使用 tkinter 的解决方案,但 OP 是我,并没有找到它的方式,所以...

    from gi.repository import Gtk, Gdk, GdkPixbuf
    
    class MyWindow(Gtk.Window):
        def __init__(self):
            Gtk.Window.__init__(self)
            self.set_default_size(200, 200)
    
            self.liststore = Gtk.ListStore(str, str, str)
            self.treeview = Gtk.TreeView(model=self.liststore)
    
            self.liststore.append(["dot_red16x16.png", "This is a symbol1","dot_green16x16.png"])
    
            px_renderer = Gtk.CellRendererPixbuf()
            px_column = Gtk.TreeViewColumn('')
            px_column.pack_start(px_renderer, False)
    
            str_renderer = Gtk.CellRendererText()
            px_column.pack_start(str_renderer, False)
    
            px_renderer2 = Gtk.CellRendererPixbuf()
            px_column.pack_start(px_renderer2, False)
    
            # set data connector function/method
            px_column.set_cell_data_func(px_renderer, self.get_tree_cell_pixbuf,0)
            px_column.set_cell_data_func(px_renderer2, self.get_tree_cell_pixbuf,2)
            px_column.set_cell_data_func(str_renderer, self.get_tree_cell_text)
            self.treeview.append_column(px_column)
    
            self.add(self.treeview)
    
        def get_tree_cell_text(self, col, cell, model, iter, user_data):
            cell.set_property('text', model.get_value(iter, 1))
    
        def get_tree_cell_pixbuf(self, col, cell, model, iter, user_data):
            cell.set_property('pixbuf', GdkPixbuf.Pixbuf.new_from_file(model.get_value(iter, user_data)))
    
    if __name__ == '__main__':
        win = MyWindow()
        win.connect("delete-event", Gtk.main_quit)
        win.show_all()
        Gtk.main()
    

    第 11 行,将 dot_red16x16.pngdot_green16x16.png 名称替换为您自己的图标文件并将其保存在图标文件旁边。

    gtk 阅读文档:https://python-gtk-3-tutorial.readthedocs.io

    旁注: 实际上(在 Windows 上)更难的是设置 GTK3 工作。这是我测试的两种方法:

    【讨论】:

      猜你喜欢
      • 2019-02-03
      • 2021-01-11
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      相关资源
      最近更新 更多