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)
python类GridFlow()的实例源码
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'))
rosbag-record-param-generator.py 文件源码
项目:my_ros_tools
作者: groundmelon
项目源码
文件源码
阅读 27
收藏 0
点赞 0
评论 0
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):
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