gpt4 book ai didi

python - 在 Gtk TreeView 树中显示图标或颜色

转载 作者:太空宇宙 更新时间:2023-11-03 13:16:38 24 4
gpt4 key购买 nike

我在加载文件或在 Gtk TreeView(GTK3 的 Python 绑定(bind))的列之一中显示颜色时遇到困难。来自 QGIS 的示例在第一行显示一个图标,在第二行显示一个蓝色圆圈。颜色取自图层属性:

enter image description here

我的代码看起来像这样,但没有加载同一目录中的 icon.png 文件:

#!/usr/bin/python3
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(GdkPixbuf.Pixbuf, str)
self.treeview = Gtk.TreeView(model=self.liststore)

symbol1 = GdkPixbuf.Pixbuf.new_from_file("icon.png")
self.liststore.append([symbol1, "This is a symbol1"])

symbol2 = Gtk.IconTheme.get_default().load_icon("gtk-cut", 64, 0)
self.liststore.append([symbol2, "This is symbol2"])

px_renderer = Gtk.CellRendererPixbuf()
px_column = Gtk.TreeViewColumn("Icon", px_renderer)
self.treeview.append_column(px_column)

str_renderer = Gtk.CellRendererText()
str_column = Gtk.TreeViewColumn("Name", str_renderer, text=1)
self.treeview.append_column(str_column)

self.add(self.treeview)

win = MyWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

GTK3 pixbuf 的文档在这里:

此处提供了 PyGTK 的较旧示例,但处理方式确实发生了一些变化:

最佳答案

这个问题可以像PyGTK2.0一样解决,需要在一个TreeViewColumn对象上附加CellRendererTextCellRendererPixbuf两个对象然后调用列的set_cell_data_func方法设置单元格的数据返回函数。这是非常复杂的(见下面的代码):

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)
self.treeview = Gtk.TreeView(model=self.liststore)

self.liststore.append(["icon.png", "This is a symbol1"])

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)
# set data connector function/method
px_column.set_cell_data_func(px_renderer, self.get_tree_cell_pixbuf)
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, 0)))

if __name__ == '__main__':
win = MyWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

关于TreeViewColumn.set_cell_data_func可以使用pygtk2.0的文档方法并阅读有关 CellRenderers 的重要页面以及 PyGTK2.0 的特殊属性,这些属性在 PyGTK 的版本 3 上很有用 :)

关于python - 在 Gtk TreeView 树中显示图标或颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27745585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com