1

我需要在 Urwid 中将文本字符串的某些部分以粗体显示。是否可以为此实现单个文本小部件?例子 :

text = u"Employees - %s, Males - %s, Females - %s" %(emp, male, female)

男性和女性的数值需要用粗体显示。

4

2 回答 2

1

我认为这应该有效:

text_items = [u"Employees - ", ('bold', emp),
              u", Males - ", ('bold', male),
              u", Females - ", ('bold', female)]
text = urwid.Text(text_items)

正如 elias 所建议的,您当然需要为粗体文本提供调色板。

于 2018-02-23T23:47:06.050 回答
1

为了做这种事情,我喜欢使用 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()
于 2017-10-28T14:25:23.400 回答