Advertisement
Guest User

urwid broken example

a guest
Sep 8th, 2019
417
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.05 KB | None | 0 0
  1. import urwid
  2.  
  3. def exit_program():
  4.     raise urwid.ExitMainLoop()
  5.  
  6. def exit_on_q(key):
  7.     if key in ('q', 'Q'):
  8.         exit_program()
  9.  
  10.  
  11.  
  12. class Menu:
  13.     def __init__(self,title,choices):
  14.         pad = urwid.Padding(self.make(title, choices), left=2, right=2)
  15.         self.main = urwid.Overlay(pad, urwid.SolidFill(u'\N{MEDIUM SHADE}'),
  16.             align='center', width=('relative', 60),
  17.             valign='middle', height=('relative', 60),
  18.             min_width=20, min_height=9)
  19.  
  20.     def make(self,title,choices):
  21.         body = [urwid.Text(title), urwid.Divider()]
  22.         for c in choices:
  23.             button = urwid.Button(c)
  24.             urwid.connect_signal(button, 'click', self.item_chosen, c)
  25.             body.append(urwid.AttrMap(button, None, focus_map='reversed'))
  26.         return urwid.ListBox(urwid.SimpleFocusListWalker(body))
  27.  
  28.     def item_chosen(self, button, choice):
  29.         response = urwid.Text([u'You chose ', choice, u'\n'])
  30.         done = urwid.Button(u'Ok')
  31.         urwid.connect_signal(done, 'click', exit_program)
  32.         self.main.original_widget = urwid.Filler(urwid.Pile([response,
  33.             urwid.AttrMap(done, None, focus_map='reversed')]))
  34.  
  35. class Browser:
  36.     def run(self):
  37.  
  38.         palette = [
  39.             ('banner', '', '', '', '#ffa', '#60d'),
  40.             ('streak', '', '', '', 'g50', '#60a'),
  41.             ('inside', '', '', '', 'g38', '#808'),
  42.             ('outside', '', '', '', 'g27', '#a06'),
  43.             ('bg', '', '', '', 'g7', '#d06'),]
  44.  
  45.         placeholder = urwid.SolidFill()
  46.         loop = urwid.MainLoop(placeholder, palette, unhandled_input=exit_on_q)
  47.         loop.screen.set_terminal_properties(colors=256)
  48.         loop.widget = urwid.AttrMap(placeholder, 'bg')
  49.         loop.widget.original_widget = urwid.Filler(urwid.Pile([]),'top')
  50.  
  51.         div = urwid.Divider()
  52.         outside = urwid.AttrMap(div, 'outside')
  53.         inside = urwid.AttrMap(div, 'inside')
  54.  
  55.         txt = (
  56.             r".__           .__  .__                               .__       .___",
  57.             r"|  |__   ____ |  | |  |   ____   __  _  _____________|  |    __| _/",
  58.             r"|  |  \_/ __ \|  | |  |  /  _ \ \ \/ \/ /  _ \_  __ \ |   / __ | ",
  59.             r"|   Y  \ ___/|  |_|  |_(  <_> )  \    (  <_> )  | \/  |__/ /_/ | ",
  60.             r"|___|  /\___  >____/____/\____/    \/\_/ \____/|__|  |____/\____ | ",
  61.             r"     \/     \/                                                  \/ "    
  62.             )
  63.         get_streak = lambda line : urwid.AttrMap(urwid.Text(('banner', line), align='center'),'streak')
  64.         streaks = map(get_streak,txt)
  65.  
  66.         choices = ('A','B','C')
  67.  
  68.         main_menu = urwid.BoxAdapter(urwid.AttrMap(Menu('Medium',choices).main,'streak'),20)
  69.  
  70.         pile = loop.widget.base_widget
  71.         widgets = [outside, inside, *streaks, inside, outside,outside,outside,main_menu]
  72.         for item in widgets:
  73.             pile.contents.append((item, pile.options()))
  74.         pile.focus_position = widgets.index(main_menu)
  75.         loop.run()
  76.  
  77. browser = Browser()
  78. browser.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement