Я хочу иметь возможность использовать разметку Pango в моем TreeViewColumn, но разметка, которая начинается в самом начале строки, по-видимому, игнорируется, если я не ожидаю пробела нулевой ширины перед строкой и разметкой.
Я заметил, что использование разметки Pango в моем тексте TreeViewColumn работало нормально, когда его не было в начале текста, как создание суффикса слова grey:
'week<span foreground="gray">ly</span>'
Но мне хотелось немного больше контрастности, поэтому я решил сделать остальную часть строки жирным, например:
'<b>week</b><span foreground="gray">ly</span>'
С этой строкой в TreeViewColumn жирный шрифт отображается не жирным шрифтом, а как обычно.Но я знал, что жирный тэг работает, потому что я мог пометить суффикс жирным шрифтом (вместо серого), и это работало нормально.Казалось, что у него были проблемы с разметкой в начале строки, поэтому я попытался предварительно подождать пробел нулевой ширины перед строкой:
'\u200B<b>week</b><span foreground="gray">ly</span>'
Затем полужирный и серый текст отображаются нормально.
Вот несколько фрагментов кода, сначала для создания ListStore и TreeView:
# create an empty ListStore for words and frequencies
self.WordListStore = Gtk.ListStore(str, int)
# create a TreeView to view the word/freq list and add to ScrolledWindow
self.WordTreeView = Gtk.TreeView(self.WordListStore)
sw.add(self.WordTreeView)
sw.show()
main_hb.pack_start(sw, True, True, 5)
# add the columns to the TreeView, use of markup=0 allows us to put tags like <b> in the entries
column = Gtk.TreeViewColumn("Word", myGlobalRenderer.vernRendererText, markup=0)
column.set_sort_column_id(0)
self.WordTreeView.append_column(column)
column = Gtk.TreeViewColumn("Frequency", myGlobalRenderer.numRendererText, text=1)
column.set_sort_column_id(1)
self.WordTreeView.append_column(column)
А затем вот фрагмент кодадля того, как я заполнил ListStore:
# start by clearing the list
listStore.clear()
prefMatch = re.compile('^<b>(' + '|'.join(a[:-1] for a in prefixes) + ')')
suffMatch = re.compile('(' + '|'.join(a[1:] for a in suffixes) + ')</b>$')
# add each of the words and its count
for word in self.words:
marked_word = '<b>' + word + '</b>'
marked_word = prefMatch.sub('<span foreground="gray">\\1</span><b>', marked_word)
marked_word = suffMatch.sub('</b><span foreground="gray">\\1</span>', marked_word)
# put zero-width space in front, or markup doesn't appear
marked_word = '\u200B' + marked_word
listStore.append([marked_word, self.words[word]])
# start with descending count order
# (but user can sort by clicking column headers)
listStore.set_sort_column_id(1, Gtk.SortType.DESCENDING)
Я не дал подробностей о переменных, но критическая деталь заключается в том, что слова, выделенные жирным шрифтом (или имеют какую-либо разметку в началестрока) не отображается с использованием этой исходной разметки.Но если я добавлю '\ u200B' в начале строки, то разметка будет выглядеть нормально.
Это ошибка с разметкой Pango?Я ожидаю, что разметка в начале строки будет отображаться правильно, точно так же, как разметка, найденная в другом месте строки, но, похоже, это не так.