标记标签在TreeViewColumn字符串的开头似乎无效

时间:2018-12-31 09:52:39

标签: python treeview gtk pygtk

我希望能够在TreeViewColumn中使用Pango标记,但是除非在字符串和标记之前添加零宽度的空格,否则从字符串开头开始的标记似乎被忽略了。

我注意到,当TreeViewColumn文本不在文本开头时,可以使用Pango标记正常工作,例如将单词后缀设为灰色:

  

'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标记的错误吗?我希望字符串开头的标记能够正确显示,就像在字符串的其他位置找到的标记一样,但事实并非如此。

0 个答案:

没有答案