2017-10-22 11 views
0

텍스트 문자열의 특정 부분을 Urwid에서 굵게 표시해야합니다. 이를 위해 하나의 Text 위젯을 구현할 수 있습니까? 예 :텍스트 부분이 굵은 글꼴로 표시됩니다.

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

남성 및 여성의 숫자 값은 굵게 표시해야합니다.

답변

0

이런 종류의 작업을 수행하려면 데이터 위젯 using the urwid.WidgetWrap을 래핑하는 사용자 정의 위젯을 작성하여 데이터 구조를 아는 위젯을 만드는 방식을 좋아합니다.

register a palette for the bold attributes to apply도 필요합니다. 나는이 일을해야한다고 생각

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() 
0

:

여기에 완벽하게 작동하는 샘플 코드이다 엘리야가 제안

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

당신은 굵은 텍스트 팔레트를 공급하기 위해 당연히해야합니다.