Добавьте более одного значка в поле дерева просмотра с python 3 и tkinter - PullRequest
0 голосов
/ 17 февраля 2020

Я знаю, как добавить значок в столбце # 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 для второго значка? кажется плохим хаком ... любые лучшие идеи приветствуются, спасибо.

1 Ответ

0 голосов
/ 17 февраля 2020

Можно было бы использовать 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.png и dot_green16x16.png имена своим собственным значком файлы и сохраните это, отрежьте в сторону файлы значков.

gtk readthedocs: https://python-gtk-3-tutorial.readthedocs.io

примечание: на самом деле тяжелее (на windows) это настроить GTK3 для работы. Вот два способа, которые я протестировал:

...