PyGTK TreeView中的文本换行
我该怎么在PyGTK的TreeView里面让文字自动换行呢?
5 个回答
1
这个回答是指向我博客的内容,写的时候我还没弄明白怎么“正确”地做这件事。正如Kai已经回答的那样,只要设置好包裹的宽度和模式,就可以在TextCellRenderer上使用。在我现在的自定义渲染器中,我使用了:
layout = cairo_context.create_layout()
font = pango.FontDescription("Sans")
font.set_size(pango.SCALE * (self.get_property('font_size')))
font.set_style(pango.STYLE_NORMAL)
font.set_weight(pango.WEIGHT_BOLD)
layout.set_font_description(font)
w=800 # the width I want to wrap at
layout.set_width(pango.SCALE * w)
layout.set_wrap(pango.WRAP_WORD)
layout.set_markup("my text to write out and wrap at the right width")
这显然是使用了pango cairo,你需要记得把想要的宽度乘以pango.SCALE,不然显示出来的会太小,看不清楚。
2
看起来这不是GTK自带的功能,不过你可以自己创建一个TreeCellRenderer,下面会详细介绍怎么做:
http://danielwould.wordpress.com/2010/01/02/maemo-custom-cell-renderer-for-gtk-treeview-python/
http://www.islascruz.org/html/index.php?blog/show/Wrap-text-in-a-TreeView-column.html
不过这看起来还是挺复杂的。
6
在gtk.TreeView中,文本是通过gtk.CellRendererText来显示的,而让文本换行主要是设置你这个单元格渲染器的正确属性。要让文本换行,你需要在单元格渲染器上设置一个叫做wrap-width
的属性(单位是像素)。你可能还想把wrap-mode
属性设置成一个合适的值。例如:
renderer.props.wrap_width = 100
renderer.props.wrap_mode = gtk.WRAP_WORD
不过,如果你想让某一列的文本宽度可以调整,PyGTK并不会自动帮你做到这一点。不过,你应该可以动态地设置wrap-width
来达到想要的效果;有一些已知的解决方法可以用在gtk.Label上,而sproaty的回答中链接的指南似乎也有类似的做法。