Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyGTK TreeView中的单词包装_Python_Pygtk_Word Wrap - Fatal编程技术网

Python PyGTK TreeView中的单词包装

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

如何在PyGTK TreeView中对文本进行自动换行?

这似乎不是GTK的内置功能,但是您可以创建自己的TreeCellRenderer,详情如下:


不过看起来相当复杂。

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</代码>中执行吗?