我们从Python开源项目中,提取了以下11个代码示例,用于说明如何使用urwid.GridFlow()。
def __init__(self): self.options = [] unsure = urwid.RadioButton(self.options, u"Unsure") yes = urwid.RadioButton(self.options, u"Yes") no = urwid.RadioButton(self.options, u"No") display_widget = urwid.GridFlow([unsure, yes, no], 15, 3, 1, 'left') urwid.WidgetWrap.__init__(self, display_widget)
def test_focus_path(self): # big tree of containers t = urwid.Text(u'x') e = urwid.Edit(u'?') c = urwid.Columns([t, e, t, t]) p = urwid.Pile([t, t, c, t]) a = urwid.AttrMap(p, 'gets ignored') s = urwid.SolidFill(u'/') o = urwid.Overlay(e, s, 'center', 'pack', 'middle', 'pack') lb = urwid.ListBox(urwid.SimpleFocusListWalker([t, a, o, t])) lb.focus_position = 1 g = urwid.GridFlow([t, t, t, t, e, t], 10, 0, 0, 'left') g.focus_position = 4 f = urwid.Frame(lb, header=t, footer=g) self.assertEqual(f.get_focus_path(), ['body', 1, 2, 1]) f.set_focus_path(['footer']) # same as f.focus_position = 'footer' self.assertEqual(f.get_focus_path(), ['footer', 4]) f.set_focus_path(['body', 1, 2, 2]) self.assertEqual(f.get_focus_path(), ['body', 1, 2, 2]) self.assertRaises(IndexError, lambda: f.set_focus_path([0, 1, 2])) self.assertRaises(IndexError, lambda: f.set_focus_path(['body', 2, 2])) f.set_focus_path(['body', 2]) # focus the overlay self.assertEqual(f.get_focus_path(), ['body', 2, 1])
def __init__(self, srvapi, tid, title=None): self._title = title self._torrent = {} sections = [] self._sections = {} for section_cls in _sections: section = section_cls() sections.append(section) self._sections[section.title] = section def add_title(title, section): header = urwid.Columns([('pack', urwid.Text('??? %s ?' % title)), urwid.Divider('?')]) return urwid.Pile([('pack', header), section]) grid = urwid.GridFlow([], cell_width=1, h_sep=3, v_sep=1, align='left') for section in sections: opts = grid.options('given', section.width) section_wrapped = add_title(section.title, section) grid.contents.append((section_wrapped, opts)) grid_sb = urwid.AttrMap( ScrollBar(urwid.AttrMap(Scrollable(grid), 'torrentsummary')), 'scrollbar' ) super().__init__(grid_sb) # Register new request in request pool keys = set(('name',)).union(key for w in sections for key in w.needed_keys) self._poller = srvapi.create_poller(srvapi.torrent.torrents, (tid,), keys=keys) self._poller.on_response(self._handle_response)
def add_buttons(self, buttons): l = [] for name, exitcode in buttons: b = urwid.Button( name, self.button_press ) b.exitcode = exitcode b = urwid.AttrWrap( b, 'selectable','focus' ) l.append( b ) self.buttons = urwid.GridFlow(l, 10, 3, 1, 'center') self.frame.footer = urwid.Pile( [ urwid.Divider(), self.buttons ], focus_item = 1)
def test_cell_width(self): gf = urwid.GridFlow([], 5, 0, 0, 'left') self.assertEqual(gf.cell_width, 5)
def test_v_sep(self): gf = urwid.GridFlow([urwid.Text("test")], 10, 3, 1, "center") self.assertEqual(gf.rows((40,), False), 1)
def test_grid_flow(self): gf = urwid.GridFlow([], 5, 1, 0, 'left') self.assertEqual(gf.focus, None) self.assertEqual(gf.contents, []) self.assertRaises(IndexError, lambda: getattr(gf, 'focus_position')) self.assertRaises(IndexError, lambda: setattr(gf, 'focus_position', None)) self.assertRaises(IndexError, lambda: setattr(gf, 'focus_position', 0)) self.assertEqual(gf.options(), ('given', 5)) self.assertEqual(gf.options(width_amount=9), ('given', 9)) self.assertRaises(urwid.GridFlowError, lambda: gf.options( 'pack', None)) t1 = urwid.Text(u'one') t2 = urwid.Text(u'two') gf = urwid.GridFlow([t1, t2], 5, 1, 0, 'left') self.assertEqual(gf.focus, t1) self.assertEqual(gf.focus_position, 0) self.assertEqual(gf.contents, [(t1, ('given', 5)), (t2, ('given', 5))]) gf.focus_position = 1 self.assertEqual(gf.focus, t2) self.assertEqual(gf.focus_position, 1) gf.contents.insert(0, (t2, ('given', 5))) self.assertEqual(gf.focus_position, 2) self.assertRaises(urwid.GridFlowError, lambda: gf.contents.append(())) self.assertRaises(urwid.GridFlowError, lambda: gf.contents.insert(1, (t1, ('pack', None)))) gf.focus_position = 0 self.assertRaises(IndexError, lambda: setattr(gf, 'focus_position', -1)) self.assertRaises(IndexError, lambda: setattr(gf, 'focus_position', 3)) # old methods: gf.set_focus(0) self.assertRaises(IndexError, lambda: gf.set_focus(-1)) self.assertRaises(IndexError, lambda: gf.set_focus(3)) gf.set_focus(t1) self.assertEqual(gf.focus_position, 1) self.assertRaises(ValueError, lambda: gf.set_focus('nonexistant'))
def __init__(self, output_prefix=None): self.exit_message = None self.output_prefix = output_prefix text_header = (u"Command Generation for 'rosbag record' ") buttons = OrderedDict() buttons['quit'] = urwid.Button(u"Quit(ESC/q)", self.on_quit) buttons['save'] = dialog.PopUpButton(u"Save(F2)", self.on_save, prompt_text=u"Input file name:", default_text=u"record.sh") buttons['mark'] = urwid.Button(u"Mark all(F3)", self.on_mark_all) buttons['unmark'] = urwid.Button(u"Unmark all(F4)", self.on_unmark_all) buttons['refresh'] = urwid.Button(u"Refresh(F5)", self.on_refresh) self.buttons = buttons # blank = urwid.Divider() header = urwid.AttrWrap(urwid.Text(text_header, align='center'), 'header') button_bar = urwid.GridFlow( [urwid.AttrWrap(btn, 'buttn', 'buttnf') for (key, btn) in buttons.iteritems()], 18, 3, 1, 'left') status_bar = urwid.AttrWrap(urwid.Text(u""), 'footer') footer = urwid.Pile([button_bar, status_bar]) self.listwalker = urwid.SimpleListWalker(self.create_listbox_from_ros()) listbox = urwid.ListBox(self.listwalker) body = urwid.AttrWrap(listbox, 'body') self.frame = urwid.Frame(body=body, header=header, footer=footer) self.frame_focus_table = dict() self.frame_focus_table[body] = 'footer' self.frame_focus_table[footer] = 'body' palette = [ ('body', 'white', 'black', 'standout'), ('reverse', 'light gray', 'black'), ('header', 'white', 'dark blue', 'bold'), ('footer', 'black', 'light gray'), ('important', 'dark blue', 'light gray', ('standout', 'underline')), ('editfc', 'white', 'dark blue', 'bold'), ('editbx', 'light gray', 'dark blue'), ('editcp', 'black', 'light gray', 'standout'), ('bright', 'dark gray', 'light gray', ('bold', 'standout')), ('buttn', 'black', 'light cyan'), ('buttnf', 'white', 'dark blue', 'bold'), ('popbg', 'white', 'dark gray'), ] self.show_msg = status_bar.set_text screen = urwid.raw_display.Screen() self.mainloop = urwid.MainLoop(self.frame, palette, screen, unhandled_input=self.unhandled, pop_ups=True) # UI functions
def graph_controls(self): modes = self.controller.get_modes() # setup mode radio buttons self.mode_buttons = [] group = [] for m in modes: rb = self.radio_button( group, m, self.on_mode_button ) self.mode_buttons.append( rb ) # setup animate button self.animate_button = self.button( "", self.on_animate_button) self.on_animate_button( self.animate_button ) self.offset = 0 self.animate_progress = self.progress_bar() animate_controls = urwid.GridFlow( [ self.animate_button, self.button("Reset", self.on_reset_button), ], 9, 2, 0, 'center') if urwid.get_encoding_mode() == "utf8": unicode_checkbox = urwid.CheckBox( "Enable Unicode Graphics", on_state_change=self.on_unicode_checkbox) else: unicode_checkbox = urwid.Text( "UTF-8 encoding not detected") self.animate_progress_wrap = urwid.WidgetWrap( self.animate_progress) l = [ urwid.Text("Mode",align="center"), ] + self.mode_buttons + [ urwid.Divider(), urwid.Text("Animation",align="center"), animate_controls, self.animate_progress_wrap, urwid.Divider(), urwid.LineBox( unicode_checkbox ), urwid.Divider(), self.button("Quit", self.exit_program ), ] w = urwid.ListBox(urwid.SimpleListWalker(l)) return w
def graph_controls(self): """ Dislplay sidebar controls. i.e. buttons, and controls""" modes = self.controller.get_modes() # setup mode radio buttons group = [] for m in modes: rb = radio_button(group, m, self.on_mode_button) self.mode_buttons.append(rb) # Create list of buttons control_options = [button("Reset", self.on_reset_button)] if stress_installed: control_options.append(button('Stress Options', self.on_stress_menu_open)) control_options.append(button('Temp Sensors', self.on_temp_sensors_menu_open)) control_options.append(button('Help', self.on_help_menu_open)) control_options.append(button('About', self.on_about_menu_open)) # Create the menu animate_controls = urwid.GridFlow(control_options, 18, 2, 0, 'center') if urwid.get_encoding_mode() == "utf8": unicode_checkbox = urwid.CheckBox( "Smooth Graph", state=False, on_state_change=self.on_unicode_checkbox) else: unicode_checkbox = urwid.Text( "UTF-8 encoding not detected") install_stress_message = urwid.Text("") if not stress_installed: install_stress_message = urwid.Text(('button normal', u"(N/A) install stress")) graph_checkboxes = [urwid.CheckBox(x.get_graph_name(), state=True, on_state_change=lambda w, state, x=x: self.change_checkbox_state(x, state)) for x in self.available_graphs.values()] unavalable_graphs = [urwid.Text(( "[N/A] " + x.get_graph_name()) ) for x in self.graphs.values() if x.source.get_is_available() == False] graph_checkboxes += unavalable_graphs buttons = [urwid.Text(('bold text', u"Modes"), align="center"), ] + self.mode_buttons + [ install_stress_message, urwid.Divider(), urwid.Text(('bold text', u"Control Options"), align="center"), animate_controls, urwid.Divider(), self.refresh_rate_ctrl, urwid.Divider(), urwid.LineBox(urwid.Pile(graph_checkboxes)), urwid.LineBox(unicode_checkbox), urwid.Divider(), button("Quit", self.exit_program), ] return buttons