使用 python 3 和 tkinter 在树视图字段中添加多个图标
Add more than one icon in a treeview field with python 3 and tkinter
我知道如何使用 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 文件(所有可能的排列)
或者在第一个树视图的左侧添加一个 column/empty 文本 jsu 作为第二个图标?
似乎是一个糟糕的黑客...任何更好的想法表示赞赏,谢谢。
一种方法是使用 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 阅读文档:https://python-gtk-3-tutorial.readthedocs.io
旁注:
实际上更难(在 windows 上)是设置 GTK3 工作。这是我测试的两种方法:
运行 来自 msys 的 gcc python 并设置所有内容(可以使用 Python 3.8.1):
https://www.gtk.org/download/windows.php
https://pygobject.readthedocs.io/en/latest/getting_started.html#windows-getting-started
使用 Cpython 3.4.4 for windows 的懒惰方式,加上 pygi-aio-3.24.1,大量的 gtk 资源:
我知道如何使用 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 文件(所有可能的排列)
或者在第一个树视图的左侧添加一个 column/empty 文本 jsu 作为第二个图标? 似乎是一个糟糕的黑客...任何更好的想法表示赞赏,谢谢。
一种方法是使用 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 阅读文档:https://python-gtk-3-tutorial.readthedocs.io
旁注: 实际上更难(在 windows 上)是设置 GTK3 工作。这是我测试的两种方法:
运行 来自 msys 的 gcc python 并设置所有内容(可以使用 Python 3.8.1):
https://www.gtk.org/download/windows.php
https://pygobject.readthedocs.io/en/latest/getting_started.html#windows-getting-started
使用 Cpython 3.4.4 for windows 的懒惰方式,加上 pygi-aio-3.24.1,大量的 gtk 资源: