【发布时间】:2011-03-21 16:53:40
【问题描述】:
我想要一个带有背景图像的 GTK TreeView,如下面的模型所示。
我找到了设置小部件背景颜色的方法,但似乎没有设置背景pixbuf或其他图像格式的方法。
我将 Python 与 PyGTK 结合使用,但任何具有 GTK 绑定的语言的答案都是可以接受的。
gtkTreeView 与背景图片的样机:
第一次尝试
根据 Jong Bor 的建议,我尝试了以下方法:
style = treeview.get_style().copy()
img_pixbuf = gtk.gdk.pixbuf_new_from_file(image_filename)
img_pixmap = img_pixbuf.render_pixmap_and_mask()[0]
for state in (gtk.STATE_NORMAL, gtk.STATE_ACTIVE, gtk.STATE_PRELIGHT,
gtk.STATE_SELECTED, gtk.STATE_INSENSITIVE):
style.bg_pixmap[state] = img_pixmap
treeview.set_style(style)
起初这似乎没有任何效果,但在我的TreeView 中选择一个项目后,我观察到以下内容:
背景的一部分'通过'选择行。
(请注意,我使用的是基于我的模型的背景图像,除了它有一些蓝色,用于测试目的)。
然后我激活了清除 TreeView 内容并重新绘制它的 GUI 的一部分,并观察到:
但是,一旦我向 TreeView 添加了一些东西,背景就会消失,所以我仍然不确定这是否朝着正确的方向发展。
【问题讨论】:
-
在填充树视图后调用 treeview.show_all() 是否使背景可见?另外,一个 hackish 建议:因为选择一行会使背景可见,所以执行 treeview.get_selection().select_all() 之类的操作来选择所有行。
-
@Jong show_all() 似乎没有效果。此外,除非整个 TreeView 已满,否则 select_all() 将无法显示背景,即使这样,界面也不再适用于用户。 :-/
标签: gtk pygtk gtktreeview