我正在使用一个看起来像上面的 Gtk3 TreeView。该模型是一个 Gtk.TreeStore
- Gtk.TreeStore(str, GdkPixbuf.Pixbuf)
对于图片,我可以通过以下方式将正确大小的图像添加到模型中:
- pixbuf.scale_simple(48,48,GdkPixbuf.InterpType.BILINEAR)
但是,我也在其他地方使用模型以不同的方式显示 pixbuf,并且 pixbuf 也可以是各种大小。
我想做的是强制在运行时显示图片的大小。问题是——我该怎么做?
我尝试强制 GtkCellRendererPixbuf 为固定大小,但这仅显示正确大小的图像 - 但仅显示与固定大小相对应的图像部分
pixbuf = Gtk.CellRendererPixbuf()
pixbuf.set_fixed_size(48,48)
我想到了使用set_cell_data_func
TreeViewColumn 的:
col = Gtk.TreeViewColumn('', pixbuf, pixbuf=1)
col.set_cell_data_func(pixbuf, self._pixbuf_func, None)
def _pixbuf_func(self, col, cell, tree_model, tree_iter, data):
cell.props.pixbuf = cell.props.pixbuf.scale_simple(48,48,GdkPixbuf.InterpType.BILINEAR)
这确实会在运行时动态调整图像大小 - 但在终端中我收到数百个错误,例如:
sys:1: RuntimeWarning: Expecting to marshal a borrowed reference for <Pixbuf object at 0x80acbe0 (GdkPixbuf at 0x87926d0)>, but nothing in Python is holding a reference to this object. See: https://bugzilla.gnome.org/show_bug.cgi?id=687522
我还通过调整 treemodel pixbuf 的大小而不是 the 来尝试替代方案,cell.props.pixbuf
但这也给出了与上述相同的错误。
cell.props.pixbuf = tree_model.get_value(tree_iter,1).scale_simple(48,48,GdkPixbuf.InterpType.BILINEAR)
所以显然这不是这样做的正确方法 - 所以有什么想法可以解决这个问题吗?任何指向基于 Gtk3 的 C++/Python 示例代码的链接都将受到欢迎。
我正在使用 Gtk+3.6 / python 2.7