Похоже, что теги разметки не работают в начале строки TreeViewColumn - PullRequest
0 голосов
/ 31 декабря 2018

Я хочу иметь возможность использовать разметку 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?Я ожидаю, что разметка в начале строки будет отображаться правильно, точно так же, как разметка, найденная в другом месте строки, но, похоже, это не так.

...