2017-12-22 9 views
1

BigText를 ListBox의 맨 위에 놓으려고 할 때 AttributeError: 'BigText' object has no attribute 'rows' 오류가 계속 발생합니다. ListBox는 "흐름"위젯을 기대하지만 BigText는 "고정 된"위젯이라는 것을 알고 있지만, 시도해도 상관없이 프로그램에서 BigText를 가져올 수는 없습니다. 다음은 내가 시도한 것에 대한 철저한 예입니다.urwid.BigText를 urwid에 넣는 법 ListBox

head_title = urwid.BigText(('banner', u'Header'), urwid.HalfBlock5x4Font()) 
head = urwid.Filler(head_title) 
# head = urwid.AttrMap(head, 'banner') 
# head = urwid.AttrMap(head, 'streak') 
head = urwid.BoxAdapter(head, 3) 
print head 
# this gives me `<BoxAdapter flow widget <Filler box widget <BigText fixed widget>> height=3>` 


body = [head, urwid.Divider()] 
return urwid.ListBox(body) 

감사합니다.

답변

0

BigText은 '고정'사이징입니다. 이는 위젯의 너비와 높이가 위젯에 의해 정의됨을 의미합니다. ListBox는 'flow'크기 조정의 위젯 만 허용합니다. 즉, 너비는 컨테이너 (이 경우 ListBox)에 의해 결정됩니다. 그래서, 당신은 먼저 'fixed'위젯을 'flow'위젯으로 변환해야합니다. 너비 속성을 'clip'으로 설정하여 장식 위젯 Padding을 사용하여이 작업을 수행 할 수 있습니다.

전체 예를 들어 여기 참조 :

import urwid 
def show_or_exit(key): 
    if key in ('q', 'Q'): 
     raise urwid.ExitMainLoop() 
    return key 

head = urwid.ListBox(urwid.SimpleFocusListWalker([ 
    urwid.Padding(
     urwid.BigText(('banner', "Hello world"), urwid.HalfBlock5x4Font()), 
     width='clip') 
])) 

loop = urwid.MainLoop(head, unhandled_input=show_or_exit) 
loop.run() 
관련 문제