我需要在 Urwid 中将文本字符串的某些部分以粗体显示。是否可以为此实现单个文本小部件?例子 :
text = u"Employees - %s, Males - %s, Females - %s" %(emp, male, female)
男性和女性的数值需要用粗体显示。
我需要在 Urwid 中将文本字符串的某些部分以粗体显示。是否可以为此实现单个文本小部件?例子 :
text = u"Employees - %s, Males - %s, Females - %s" %(emp, male, female)
男性和女性的数值需要用粗体显示。
我认为这应该有效:
text_items = [u"Employees - ", ('bold', emp),
u", Males - ", ('bold', male),
u", Females - ", ('bold', female)]
text = urwid.Text(text_items)
正如 elias 所建议的,您当然需要为粗体文本提供调色板。
为了做这种事情,我喜欢使用 urwid.WidgetWrap构建一个包含文本小部件的自定义小部件的方法,创建一个知道数据结构的小部件。
您还需要为要应用的粗体属性注册一个调色板。
这是一个完整的示例代码:
import urwid
# create a palette defining bold attribute
PALETTE = [
('bold', 'bold', ''),
]
class BoldValuesList(urwid.WidgetWrap):
"""Show a list of key values, with values in bold
"""
def __init__(self, values):
self.separator = u', '
self.values = values
self.text = urwid.Text(self._build_text())
super(BoldValuesList, self).__init__(self.text)
def _build_text(self):
# build text markup -- see:
# http://urwid.org/manual/displayattributes.html#text-markup
texts = []
for i, (k, v) in enumerate(self.values):
texts.append(u'%s: ' % k)
texts.append(('bold', u'%s' % v))
if i < len(self.values) - 1:
texts.append(self.separator)
return texts
def show_or_exit(key):
"Exit if user press Q or Esc"
if key in ('q', 'Q', 'esc'):
raise urwid.ExitMainLoop()
txt = BoldValuesList([
(u'Employees', 45),
(u'Males', 20),
(u'Females', 25),
])
filler = urwid.Filler(txt, 'top')
# create the main loop wiring the widget, the palette and input handler
loop = urwid.MainLoop(filler, PALETTE, unhandled_input=show_or_exit)
loop.run()