def back(self, terminate=False):
if app.mode == "index" and terminate:
frilly_exit()
elif self.overlay_p():
self.loop.widget = self.loop.widget[0]
elif self.window_split:
# display a confirmation dialog before killing off an in-progress post
buttons = [
urwid.Text(("bold", "Discard current post?")),
urwid.Divider(),
cute_button(("10" , ">> Yes"), lambda _: [
self.remove_overlays(),
self.index()
]),
cute_button(("30", "<< No"), self.remove_overlays)
]
# TODO: create a central routine for creating popups. this is getting really ridiculous
popup = OptionsMenu(
urwid.ListBox(urwid.SimpleFocusListWalker(buttons)),
**frame_theme())
self.loop.widget = urwid.Overlay(
popup, self.loop.widget,
align=("relative", 50),
valign=("relative", 25),
width=30, height=6)
else:
mark()
self.index()
python类Divider()的实例源码
def general_help(self):
"""
Show a general help dialog. In all honestly, its not
very useful and will only help people who have never
really used terminal software before =)
"""
widget = OptionsMenu(
urwid.ListBox(
urwid.SimpleFocusListWalker([
urwid_rainbows(
"This is BBJ, a client/server textboard made for tilde.town!",
True),
urwid.Text(("dim", "...by ~desvox")),
urwid.Divider("-"),
urwid.Button("Post Formatting Help", self.formatting_help),
urwid.Divider("-"),
urwid.Text(general_help)
])),
title="?????",
**frame_theme()
)
app.loop.widget = urwid.Overlay(
widget, app.loop.widget,
align=("relative", 50),
valign=("relative", 50),
width=30,
height=("relative", 60)
)
def __init__(self, doc):
self.doc = doc
self.docid = self.doc["ref"]
data = self.doc.to_dict()
# fill the default attributes for the fields
show_fields = papis.config.get(
"show-fields", section="urwid-gui"
).replace(" ", "").split(",")
self.fields = {}
for field in show_fields:
self.fields[field] = urwid.Text('')
if field in data:
self.fields[field].set_text(str(self.doc[field]))
self.c1width = 10
self.rowHeader = urwid.AttrMap(
urwid.Text('ref:%s ' % (self.docid)),
'head',
'head_focus'
)
docfields = [self.docfield(field) for field in show_fields]
# FIXME: how do we hightlight everything in pile during focus?
w = urwid.Pile(
[
urwid.Divider('-'),
self.rowHeader,
] + docfields,
focus_item=1
)
self.__super.__init__(w)
def menu(title, choices):
body = [urwid.Text(title), urwid.Divider()]
for c in choices:
button = urwid.Button(c)
urwid.connect_signal(button, 'click', item_chosen, c)
body.append(urwid.AttrMap(button, None, focus_map='reversed'))
return urwid.ListBox(urwid.SimpleFocusListWalker(body))
def __init__(self, caption, choices):
super(SubMenu, self).__init__(MenuButton(
[caption, u"\N{HORIZONTAL ELLIPSIS}"], self.open_menu))
line = urwid.Divider(u'\N{LOWER ONE QUARTER BLOCK}')
listbox = urwid.ListBox(urwid.SimpleFocusListWalker([
urwid.AttrMap(urwid.Text([u"\n ", caption]), 'heading'),
urwid.AttrMap(line, 'line'),
urwid.Divider()] + choices + [urwid.Divider()]))
self.menu = urwid.AttrMap(listbox, 'options')
def menu(title, choices):
body = [urwid.Text(title), urwid.Divider()]
body.extend(choices)
return urwid.ListBox(urwid.SimpleFocusListWalker(body))
def __init__(self, text, height, width, body=None):
width = int(width)
if width <= 0:
width = ('relative', 80)
height = int(height)
if height <= 0:
height = ('relative', 80)
self.body = body
if body is None:
# fill space with nothing
body = urwid.Filler(urwid.Divider(),'top')
self.frame = urwid.Frame( body, focus_part='footer')
if text is not None:
self.frame.header = urwid.Pile( [urwid.Text(text),
urwid.Divider()] )
w = self.frame
# pad area around listbox
w = urwid.Padding(w, ('fixed left',2), ('fixed right',2))
w = urwid.Filler(w, ('fixed top',1), ('fixed bottom',1))
w = urwid.AttrWrap(w, 'body')
# "shadow" effect
w = urwid.Columns( [w,('fixed', 2, urwid.AttrWrap(
urwid.Filler(urwid.Text(('border',' ')), "top")
,'shadow'))])
w = urwid.Frame( w, footer =
urwid.AttrWrap(urwid.Text(('border',' ')),'shadow'))
# outermost border area
w = urwid.Padding(w, 'center', width )
w = urwid.Filler(w, 'middle', height )
w = urwid.AttrWrap( w, 'border' )
self.view = w
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 _setup_ui(self):
email = input('???? (Email??): ')
password = getpass.getpass('????: ')
api = DoubanFMApi()
api.login(email, password)
songs = api.get_redheart_songs()
# ??
self.title = urwid.Text('')
self._update_title()
divider = urwid.Divider()
header = urwid.Padding(urwid.Pile([divider, self.title, divider]), left=4, right=4)
# ????
index = 0
for song in songs:
self.btns.append(SongButton(song, self._on_item_pressed, index))
index += 1
self.song_listbox = SongListBox(self.btns)
# ??
self.main = urwid.Padding(
urwid.Frame(self.song_listbox, header=header, footer=divider),
left=4, right=4)
# ??????
urwid.register_signal(
SongListBox, ['exit', 'stop', 'next_song', 'change_mode'])
urwid.connect_signal(self.song_listbox, 'exit', self._on_exit)
urwid.connect_signal(self.song_listbox, 'stop', self.stop_song)
urwid.connect_signal(self.song_listbox, 'next_song', self.next_song)
urwid.connect_signal(self.song_listbox, 'change_mode', self.change_mode)
self.loop = urwid.MainLoop(self.main, palette=self.palette)
self.loop.screen.set_terminal_properties(colors=256)
def __init__(self, quiz, host_view, result, loop = None):
self.quiz = quiz
self.host_view = host_view
self.result = result
self.loop = loop
self.logger = logging.getLogger(__name__)
if result:
if 'status_code' not in result:
raise ValueError('Unknow result format: %s' % json.dumps(result))
if result['status_code'] is 20:
self.listbox = self.make_compile_error_view()
elif result['status_code'] is 10:
self.listbox = self.make_success_view()
elif result['status_code'] is 11:
self.listbox = self.make_failed_view()
elif result['status_code'] is 12:# memeory limit exceeded
self.listbox = self.make_unified_error_view("Memory Limit Exceeded")
elif result['status_code'] is 13:# output limit exceeded
self.listbox = self.make_unified_error_view("Output Limit Exceeded")
elif result['status_code'] is 14:# timeout
self.listbox = self.make_unified_error_view("Time Limit Exceeded")
elif result['status_code'] is 15:
self.listbox = self.make_runtime_error_view()
else:
raise ValueError('Unknow status code: %d' % result['status_code'])
else:
raise ValueError('result shouldn\'t be None')
self.overlay = urwid.Overlay(urwid.LineBox(self.listbox), host_view,
align='center', width=('relative', 95),
valign='middle', height=('relative', 95),
min_width=40, min_height=40)
footer = urwid.Pile([urwid.Text('Press Esc to close this view.', align='center'),
urwid.Divider()])
urwid.Frame.__init__(self, self.overlay, footer=footer)
def _append_stdout_if_non_empty(self, list_items):
std_output = self.result.get('std_output', '')
if len(std_output) > 0:
blank = urwid.Divider()
stdout_header = urwid.Text('Stdout:')
if len(std_output) > 100:
std_output = '%s...%s\n(output trimmed due to its length)' %\
(std_output[:90], std_output[-10:])
stdout = urwid.Text(std_output)
list_items.extend([blank, stdout_header, stdout])
def make_success_view(self):
blank = urwid.Divider()
status_header = urwid.AttrWrap(urwid.Text('Run Code Status: '), 'body')
status = urwid.AttrWrap(urwid.Text('Accepted'), 'accepted')
columns = urwid.Columns([(20, status_header), (20, status)])
runtime = urwid.Text('Run time: %s' % self.result['status_runtime'])
result_header = urwid.Text('--- Run Code Result: ---', align='center')
list_items = [
result_header,
blank, columns,
blank, runtime
]
self._append_stdout_if_non_empty(list_items)
return urwid.Padding(urwid.ListBox(urwid.SimpleListWalker(list_items)), left=2, right=2)
def __init__(self, quiz, loop = None):
self.quiz = quiz
self.loop = loop
self.logger = logging.getLogger(__name__)
blank = urwid.Divider()
view_title = urwid.AttrWrap(urwid.Text(self.quiz.title), 'body')
view_text = self.make_body_widgets()
view_code_title = urwid.Text('\n --- Sample Code ---\n')
view_code = urwid.Text(self.quiz.sample_code)
listitems = [blank, view_title, blank] + view_text + \
[blank, view_code_title, blank, view_code, blank]
self.listbox = urwid.ListBox(urwid.SimpleListWalker(listitems))
urwid.Frame.__init__(self, self.listbox)
def make_body_widgets(self):
newline = 0
tags = False
text_widgets = []
for line in self.quiz.content.split('\n'):
text_widgets.append(urwid.Text(line))
text_widgets.append(urwid.Divider())
for tag in self.quiz.tags:
text_widgets.append(urwid.Text(('tag', tag)))
return text_widgets
def cpu_stats(self):
"""Read and display processor name """
cpu_name = urwid.Text("CPU Name N/A", align="center")
try:
cpu_name = urwid.Text(get_processor_name().strip(), align="center")
except:
logging.info("CPU name not available")
cpu_stats = [cpu_name, urwid.Divider()]
return cpu_stats
def __init__(self, app, story_key):
super(StoryView, self).__init__(urwid.Pile([]))
self.log = logging.getLogger('boartty.view.story')
self.searchInit()
self.app = app
self.story_key = story_key
self.task_rows = {}
self.event_rows = {}
self.hide_events = True
self.marked_seen = False
self.title_label = urwid.Text(u'', wrap='clip')
self.creator_label = mywid.TextButton(u'', on_press=self.searchCreator)
self.tags_label = urwid.Text(u'', wrap='clip')
self.created_label = urwid.Text(u'', wrap='clip')
self.updated_label = urwid.Text(u'', wrap='clip')
self.status_label = urwid.Text(u'', wrap='clip')
self.permalink_label = mywid.TextButton(u'', on_press=self.openPermalink)
story_info = []
story_info_map={'story-data': 'focused-story-data'}
for l, v in [("Title", self.title_label),
("Creator", urwid.Padding(urwid.AttrMap(self.creator_label, None,
focus_map=story_info_map),
width='pack')),
("Tags", urwid.Padding(urwid.AttrMap(self.tags_label, None,
focus_map=story_info_map),
width='pack')),
("Created", self.created_label),
("Updated", self.updated_label),
("Status", self.status_label),
("Permalink", urwid.Padding(urwid.AttrMap(self.permalink_label, None,
focus_map=story_info_map),
width='pack')),
]:
row = urwid.Columns([(12, urwid.Text(('story-header', l), wrap='clip')), v])
story_info.append(row)
story_info = urwid.Pile(story_info)
self.description = DescriptionBox(app, u'')
self.listbox = urwid.ListBox(urwid.SimpleFocusListWalker([]))
self._w.contents.append((self.app.header, ('pack', 1)))
self._w.contents.append((urwid.Divider(), ('pack', 1)))
self._w.contents.append((self.listbox, ('weight', 1)))
self._w.set_focus(2)
self.listbox.body.append(story_info)
self.listbox.body.append(urwid.Divider())
self.listbox_tasks_start = len(self.listbox.body)
self.listbox.body.append(urwid.Divider())
self.listbox.body.append(self.description)
self.listbox.body.append(urwid.Divider())
self.refresh()
self.listbox.set_focus(3)
rosbag-record-param-generator.py 文件源码
项目:my_ros_tools
作者: groundmelon
项目源码
文件源码
阅读 29
收藏 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 setup_view(self):
fonts = urwid.get_all_fonts()
# setup mode radio buttons
self.font_buttons = []
group = []
utf8 = urwid.get_encoding_mode() == "utf8"
for name, fontcls in fonts:
font = fontcls()
if font.utf8_required and not utf8:
rb = self.create_disabled_radio_button(name)
else:
rb = self.create_radio_button(group, name, font,
self.set_font_event)
if fontcls == urwid.Thin6x6Font:
chosen_font_rb = rb
exit_font = font
self.font_buttons.append( rb )
# Create BigText
self.bigtext = urwid.BigText("", None)
bt = SwitchingPadding(self.bigtext, 'left', None)
bt = urwid.AttrWrap(bt, 'bigtext')
bt = urwid.Filler(bt, 'bottom', None, 7)
bt = urwid.BoxAdapter(bt, 7)
# Create chars_avail
cah = urwid.Text("Characters Available:")
self.chars_avail = urwid.Text("", wrap='any')
ca = urwid.AttrWrap(self.chars_avail, 'chars')
chosen_font_rb.set_state(True) # causes set_font_event call
# Create Edit widget
edit = self.create_edit("", "Urwid "+urwid.__version__,
self.edit_change_event)
# ListBox
chars = urwid.Pile([cah, ca])
fonts = urwid.Pile([urwid.Text("Fonts:")] + self.font_buttons,
focus_item=1)
col = urwid.Columns([('fixed',16,chars), fonts], 3,
focus_column=1)
bt = urwid.Pile([bt, edit], focus_item=1)
l = [bt, urwid.Divider(), col]
w = urwid.ListBox(urwid.SimpleListWalker(l))
# Frame
w = urwid.AttrWrap(w, 'body')
hdr = urwid.Text("Urwid BigText example program - F8 exits.")
hdr = urwid.AttrWrap(hdr, 'header')
w = urwid.Frame(header=hdr, body=w)
# Exit message
exit = urwid.BigText(('exit'," Quit? "), exit_font)
exit = urwid.Overlay(exit, w, 'center', None, 'middle', None)
return w, exit
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 setup_view(self):
fonts = urwid.get_all_fonts()
# setup mode radio buttons
self.font_buttons = []
group = []
utf8 = urwid.get_encoding_mode() == "utf8"
for name, fontcls in fonts:
font = fontcls()
if font.utf8_required and not utf8:
rb = self.create_disabled_radio_button(name)
else:
rb = self.create_radio_button(group, name, font,
self.set_font_event)
if fontcls == urwid.Thin6x6Font:
chosen_font_rb = rb
exit_font = font
self.font_buttons.append( rb )
# Create BigText
self.bigtext = urwid.BigText("", None)
bt = SwitchingPadding(self.bigtext, 'left', None)
bt = urwid.AttrWrap(bt, 'bigtext')
bt = urwid.Filler(bt, 'bottom', None, 7)
bt = urwid.BoxAdapter(bt, 7)
# Create chars_avail
cah = urwid.Text("Characters Available:")
self.chars_avail = urwid.Text("", wrap='any')
ca = urwid.AttrWrap(self.chars_avail, 'chars')
chosen_font_rb.set_state(True) # causes set_font_event call
# Create Edit widget
edit = self.create_edit("", "Urwid "+urwid.__version__,
self.edit_change_event)
# ListBox
chars = urwid.Pile([cah, ca])
fonts = urwid.Pile([urwid.Text("Fonts:")] + self.font_buttons,
focus_item=1)
col = urwid.Columns([('fixed',16,chars), fonts], 3,
focus_column=1)
bt = urwid.Pile([bt, edit], focus_item=1)
l = [bt, urwid.Divider(), col]
w = urwid.ListBox(urwid.SimpleListWalker(l))
# Frame
w = urwid.AttrWrap(w, 'body')
hdr = urwid.Text("Urwid BigText example program - F8 exits.")
hdr = urwid.AttrWrap(hdr, 'header')
w = urwid.Frame(header=hdr, body=w)
# Exit message
exit = urwid.BigText(('exit'," Quit? "), exit_font)
exit = urwid.Overlay(exit, w, 'center', None, 'middle', None)
return w, exit