2017-12-22 12 views
1

ListBoxの上部にBigTextを配置しようとすると、エラーAttributeError: 'BigText' object has no attribute 'rows'が表示され続けます。 BigTextは "固定"ウィジェットで、ListBoxは "フロー"ウィジェットを期待していますが、私が試しても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)によって幅が決まることを意味します。だから、最初に彼は '固定'ウィジェットを 'フロー'ウィジェットに変換する必要があります。これは、widthプロパティを '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() 
関連する問題