Перенос слов в PyGTK TreeView - PullRequest
       16

Перенос слов в PyGTK TreeView

3 голосов
/ 06 января 2010

Как мне перевести текст в PyGTK TreeView?

Ответы [ 4 ]

6 голосов
/ 07 января 2010

Текст в 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, похоже, делают то же самое.

1 голос
/ 26 февраля 2010

Ответ, направленный на мой пост в блоге, был до того, как я понял, как это сделать «правильно» как Кай уже ответил, просто установка ширины переноса и режим переноса работает на 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 умножает ширину, которую вы хотите, иначе она слишком мала, чтобы видеть.

1 голос
/ 06 января 2010

Кажется, это не встроенная функция 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

кажется довольно сложным.

0 голосов
/ 06 марта 2017

При поиске решения этого вопроса я случайно собирал его из разных источников. При изменении ширины столбца текст переносится динамически:

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)
...