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