Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import urwid
- def exit_program():
- raise urwid.ExitMainLoop()
- def exit_on_q(key):
- if key in ('q', 'Q'):
- exit_program()
- class Menu:
- def __init__(self,title,choices):
- pad = urwid.Padding(self.make(title, choices), left=2, right=2)
- self.main = urwid.Overlay(pad, urwid.SolidFill(u'\N{MEDIUM SHADE}'),
- align='center', width=('relative', 60),
- valign='middle', height=('relative', 60),
- min_width=20, min_height=9)
- def make(self,title,choices):
- body = [urwid.Text(title), urwid.Divider()]
- for c in choices:
- button = urwid.Button(c)
- urwid.connect_signal(button, 'click', self.item_chosen, c)
- body.append(urwid.AttrMap(button, None, focus_map='reversed'))
- return urwid.ListBox(urwid.SimpleFocusListWalker(body))
- def item_chosen(self, button, choice):
- response = urwid.Text([u'You chose ', choice, u'\n'])
- done = urwid.Button(u'Ok')
- urwid.connect_signal(done, 'click', exit_program)
- self.main.original_widget = urwid.Filler(urwid.Pile([response,
- urwid.AttrMap(done, None, focus_map='reversed')]))
- class Browser:
- def run(self):
- palette = [
- ('banner', '', '', '', '#ffa', '#60d'),
- ('streak', '', '', '', 'g50', '#60a'),
- ('inside', '', '', '', 'g38', '#808'),
- ('outside', '', '', '', 'g27', '#a06'),
- ('bg', '', '', '', 'g7', '#d06'),]
- placeholder = urwid.SolidFill()
- loop = urwid.MainLoop(placeholder, palette, unhandled_input=exit_on_q)
- loop.screen.set_terminal_properties(colors=256)
- loop.widget = urwid.AttrMap(placeholder, 'bg')
- loop.widget.original_widget = urwid.Filler(urwid.Pile([]),'top')
- div = urwid.Divider()
- outside = urwid.AttrMap(div, 'outside')
- inside = urwid.AttrMap(div, 'inside')
- txt = (
- r".__ .__ .__ .__ .___",
- r"| |__ ____ | | | | ____ __ _ _____________| | __| _/",
- r"| | \_/ __ \| | | | / _ \ \ \/ \/ / _ \_ __ \ | / __ | ",
- r"| Y \ ___/| |_| |_( <_> ) \ ( <_> ) | \/ |__/ /_/ | ",
- r"|___| /\___ >____/____/\____/ \/\_/ \____/|__| |____/\____ | ",
- r" \/ \/ \/ "
- )
- get_streak = lambda line : urwid.AttrMap(urwid.Text(('banner', line), align='center'),'streak')
- streaks = map(get_streak,txt)
- choices = ('A','B','C')
- main_menu = urwid.BoxAdapter(urwid.AttrMap(Menu('Medium',choices).main,'streak'),20)
- pile = loop.widget.base_widget
- widgets = [outside, inside, *streaks, inside, outside,outside,outside,main_menu]
- for item in widgets:
- pile.contents.append((item, pile.options()))
- pile.focus_position = widgets.index(main_menu)
- loop.run()
- browser = Browser()
- browser.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement