Python PyGTK TreeView中的单词包装
如何在PyGTK TreeView中对文本进行自动换行?这似乎不是GTK的内置功能,但是您可以创建自己的TreeCellRenderer,详情如下:Python PyGTK TreeView中的单词包装,python,pygtk,word-wrap,Python,Pygtk,Word Wrap,如何在PyGTK TreeView中对文本进行自动换行?这似乎不是GTK的内置功能,但是您可以创建自己的TreeCellRenderer,详情如下: 不过看起来相当复杂。gtk.TreeView中的文本是使用gtk.cellRenderText呈现的,而换行文本归结为在单元格呈现器上设置正确的属性。为了获得要换行的文本,您需要在单元渲染器上设置换行宽度属性(以像素为单位)。您可能还希望将wrap mode属性设置为合理的值。例如: renderer.props.wrap_width = 10
不过看起来相当复杂。gtk.TreeView中的文本是使用gtk.cellRenderText呈现的,而换行文本归结为在单元格呈现器上设置正确的属性。为了获得要换行的文本,您需要在单元渲染器上设置
换行宽度
属性(以像素为单位)。您可能还希望将wrap mode
属性设置为合理的值。例如:
renderer.props.wrap_width = 100
renderer.props.wrap_mode = gtk.WRAP_WORD
不幸的是,如果您想在列上使用宽度可调的换行,PyGTK不会自动为您这样做。您应该能够动态设置
包裹宽度
,以获得正确的效果;gtk.Label也有类似的例子,斯普罗蒂的答案中链接的指南似乎做了类似的事情。在我的博客文章中给出的答案,是在我发现如何“正确”完成之前给出的
正如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。否则它太小,看不见。在寻找这个问题的解决方案时,我碰巧通过不同的来源将其组合在一起。更改列宽时,文本将动态换行:
def set_column_width(column, width, renderer, pan = True):
column_width = column.get_width()
#print "column %s size %s" % (column.get_title(), column_width)
renderer.props.wrap_width = column_width
if pan:
renderer.props.wrap_mode = pango.WRAP_WORD
else:
renderer.props.wrap_mode = gtk.WRAP_WORD
cell_renderer = gtk.CellRendererText()
column = gtk.TreeViewColumn()
column.connect_after("notify::width", set_column_width, cell_renderer)
我是PyGTK的新手,所以如果我遗漏了任何细节,请留下评论。pango.SCALE正是我在pangocairo“完成”包装所需要的。谢谢您知道如何在C++版本<代码> GTKMM-2.4</代码>中执行吗?