def __init__(self, config, board):
"""Initialize the most needed components."""
self.config = config
self.board = board
self.header = None
self.footer = None
# Some sugar.
self.div = ur.Divider()
# Used in list_boards().
self.boards_count = 0
self.loop = Loop(None, self.unhandled)
# Calculate min_width and left/right margins for Padding widgets.
self.width = self.loop.dimensions[0] // 2
self.margin = int((self.loop.dimensions[0] - self.width) * 0.60)
# Flag for checking if board list is currently being displayed.
self.list_visible = False
# This flag needs to be here to fix a bug where Enter doesn't work
# after hitting 'h' twice.
self.help_flag = False
# Another flag, this one is for board list display - it should only
# be printed in the main menu/MOTD screen, nowhere else.
self.motd_flag = False
python类Padding()的实例源码
def init_main_screen(self):
self.w_filter_edit = urwid.Edit('Filter ')
aw_filter_edit = urwid.AttrMap(self.w_filter_edit, 'edit', 'edit_focus')
self.w_status_line = urwid.AttrMap(StatusLine(self.store.get_test_stats), 'statusline', '')
urwid.connect_signal(self.w_filter_edit, 'change', self.on_filter_change)
self.init_test_listbox()
self.w_main = urwid.Padding(
urwid.Pile([
('pack', urwid.Text(u'Python Urwid Test Runner', align='center')),
('pack', urwid.Divider()),
('pack', aw_filter_edit),
('pack', urwid.Divider()),
self.w_test_listbox,
('pack', urwid.Divider()),
('pack', self.w_status_line),
]),
left=2, right=2
)
def __init__(self, chat_widget):
self.chat_widget = chat_widget
self.message = FakeMessage(datetime.datetime.min)
self._selectable = False
txt = urwid.Text(
" \n"
" \n"
" \n"
" \n"
"< moo > \n"
" ----- \n"
" \ ^__^ \n"
" \ (oo)\_______ \n"
" (__)\ )\/\ \n"
" ||----w | \n"
" || || \n"
" \n"
" \n"
"Congratulations! You have reached the top, Thats awesome! Unless "
"the channel is empty, in which case, meh... big deal.\n\n",
align=urwid.CENTER)
w = urwid.Padding(txt, left=5, right=5)
self.__super.__init__(w)
def __init__(self, prompt_text=u"Input:", default_text=u""):
close_button = urwid.Button("OK")
prompt = urwid.Text(prompt_text)
edit_field = CustomEdit(caption=u'',
edit_text=default_text,
multiline=False,
align='left',
wrap='space',
allow_tab=False,
edit_pos=None,
layout=None,
mask=None)
prompt_wrap = urwid.AttrMap(prompt, 'header')
close_button_wrap = urwid.AttrMap(close_button, 'buttn', 'buttnf')
edit_field_wrap = urwid.AttrMap(edit_field, 'editcp')
urwid.connect_signal(close_button, 'click', edit_field.on_finish)
urwid.connect_signal(edit_field, 'done', self.on_close)
pile = urwid.Pile([prompt_wrap,
edit_field_wrap,
urwid.Padding(close_button_wrap, 'center', 6)])
fill = urwid.Filler(urwid.Padding(pile, 'center', left=1, right=1))
self.__super.__init__(urwid.AttrWrap(fill, 'popbg'))
def test_reduced_padding_cursor(self):
# FIXME: This is at least consistent now, but I don't like it.
# pack() on an Edit should leave room for the cursor
# fixing this gets deep into things like Edit._shift_view_to_cursor
# though, so this might not get fixed for a while
p = urwid.Padding(urwid.Edit(u'',u''), width='pack', left=4)
self.assertEqual(p.render((10,), True).cursor, None)
self.assertEqual(p.get_cursor_coords((10,)), None)
self.assertEqual(p.render((4,), True).cursor, None)
self.assertEqual(p.get_cursor_coords((4,)), None)
p = urwid.Padding(urwid.Edit(u'',u''), width=('relative', 100), left=4)
self.assertEqual(p.render((10,), True).cursor, (4, 0))
self.assertEqual(p.get_cursor_coords((10,)), (4, 0))
self.assertEqual(p.render((4,), True).cursor, None)
self.assertEqual(p.get_cursor_coords((4,)), None)
def make_failed_view(self):
blank = urwid.Divider()
status_header = urwid.AttrWrap(urwid.Text('Run Code Status: '), 'body')
status = urwid.AttrWrap(urwid.Text('Wrong Answer'), 'hometag')
columns = urwid.Columns([(17, status_header), (20, status)])
result_header = urwid.Text('--- Run Code Result: ---', align='center')
passed_header = urwid.Text('Passed test cases:')
s = self.result['compare_result']
passed = urwid.Text('%d/%d' % (s.count('1'), len(s)))
your_input_header = urwid.Text('Your input:')
your_input = urwid.Text(self.result['input'])
your_answer_header = urwid.Text('Your answer:')
your_answer = urwid.Text(self.result['code_output'])
expected_answer_header = urwid.Text('Expected answer:')
expected_answer = urwid.Text(self.result['expected_output'])
list_items = [
result_header,
blank, columns,
blank, passed_header, passed,
blank, your_input_header, your_input,
blank, your_answer_header, your_answer,
blank, expected_answer_header, expected_answer
]
self._append_stdout_if_non_empty(list_items)
return urwid.Padding(urwid.ListBox(urwid.SimpleListWalker(list_items)), left=2, right=2)
def make_compile_error_view(self):
blank = urwid.Divider()
status_header = urwid.AttrWrap(urwid.Text('Run Code Status: '), 'body')
status = urwid.AttrWrap(urwid.Text('Compile Error'), 'hometag')
columns = urwid.Columns([(17, status_header), (20, status)])
column_wrap = urwid.WidgetWrap(columns)
result_header = urwid.Text('--- Run Code Result: ---', align='center')
your_input_header = urwid.Text('Your input:')
your_input = urwid.Text('')
your_answer_header = urwid.Text('Your answer:')
your_answer = urwid.Text(self.result['compile_error'])
expected_answer_header = urwid.Text('Expected answer:')
expected_answer = urwid.Text('Unkown Error')
list_items = [
result_header,
blank, column_wrap,
blank, your_input_header, your_input,
blank, your_answer_header, your_answer,
blank, expected_answer_header, expected_answer
]
self._append_stdout_if_non_empty(list_items)
return urwid.Padding(urwid.ListBox(urwid.SimpleListWalker(list_items)), left=2, right=2)
def make_runtime_error_view(self):
blank = urwid.Divider()
status_header = urwid.AttrWrap(urwid.Text('Run Code Status: '), 'body')
status = urwid.AttrWrap(urwid.Text('Runtime Error'), 'hometag')
columns = urwid.Columns([(17, status_header), (20, status)])
column_wrap = urwid.WidgetWrap(columns)
result_header = urwid.Text('--- Run Code Result: ---', align='center')
error_header = urwid.Text('Runtime Error Message:')
error_message = urwid.Text(self.result['runtime_error'])
your_input_header = urwid.Text('Last input:')
your_input = urwid.Text(self.result['last_testcase'])
list_items = [
result_header,
blank, column_wrap,
blank, error_header, error_message,
blank, your_input_header, your_input,
]
self._append_stdout_if_non_empty(list_items)
return urwid.Padding(urwid.ListBox(urwid.SimpleListWalker(list_items)), left=2, right=2)
def pad(widget, left=2, right=2):
return urwid.Padding(widget, left=left, right=right)
def __init__(self, text, vertical_padding=True):
content = [urwid.Padding(self.get_content(text), left=3, right=3)]
if vertical_padding:
content = [DIV] + content + [DIV]
lbox = urwid.LineBox(urwid.Pile(content))
self.__super.__init__(urwid.AttrMap(urwid.Pile(
[lbox]), 'image button', 'image button focus'))
def __init__(self, pic, text):
content = self.get_content(text)
lbox = urwid.LineBox(urwid.Pile([DIV, urwid.Padding(
urwid.Columns([(8, pic), content], 4), left=3, right=3), DIV]))
self.__super.__init__(urwid.AttrMap(urwid.Pile(
[lbox]), 'image button', 'image button focus'))
def __init__(self, label="", label_width=15, next_callback=False):
self.label, self.next_callback = label, next_callback
self.edit = urwid.Padding(urwid.Edit(), left=1, right=1)
label = urwid.LineBox(
urwid.Text(label),
tlcorner=' ',
tline=' ',
lline=' ',
trcorner=' ',
blcorner=' ',
rline=' ',
brcorner=' ',
bline=' ')
lbox = urwid.AttrMap(
urwid.LineBox(
self.edit,
tlcorner=' ',
tline=' ',
lline=' ',
trcorner=' ',
blcorner=' ',
rline=' ',
brcorner=' '),
'input',
'input focus')
cols = urwid.Columns([(label_width, label), lbox])
urwid.WidgetWrap.__init__(self, cols)
def __init__(self, result):
self.result = result
self.total = len(result)
self.update_view('next_callback')
walker = urwid.SimpleListWalker([urwid.Padding(self.top_columns, left=3, right=3),
self.test_result])
adapter = urwid.BoxAdapter(urwid.ListBox(walker), height=14)
urwid.WidgetWrap.__init__(self, adapter)
def MOTD_screen(self):
"""MOTD display method - first screen shown."""
self.motd_flag = True
self.header = self.make_header()
mid = ur.Padding(ur.ListBox(
ur.SimpleFocusListWalker([
self.div, ur.Text([("red", "Welcome to "),
("yellow", "sshchan!\n==========="),
("red", "========\n"),
("green", "SERVER: "),
self.config.server_name,
("green", "\nMOTD:\n")], "center"),
self.div])), "center", ("relative", 60), self.width,
self.margin, self.margin)
# TODO: add currently online users to the footer.
self.footer = ur.AttrMap(ur.Text(
" " + self.config.server_name + " " + self.config.version +
" | Press H for help", align="center"), "reverse", None)
try:
with open(self.config.motd, 'r') as m:
buf = m.read()
except FileNotFoundError:
buf = "---sshchan! woo!---"
motd = ur.Text(buf, "center")
mid.original_widget.body.append(motd)
mid.original_widget.body.append(self.div)
return ur.Frame(mid, self.header, self.footer, focus_part="body")
def show_help(self):
"""Create and return Frame object containing help docs."""
# Flags are gr8 against bugs.
self.help_flag = True
help_header = ur.Text(("green", "SSHCHAN HELP"), "center")
pg1 = ur.Text(
[("bold", "sshchan "), "is a textboard environment designed \
to run on remote SSH servers with multiple anonymous users simultaneously \
browsing and posting."], "center")
pg2 = ur.Text(("bold", "Keybindings:"))
pg3 = ur.Text([("green", "TAB"),
(
None,
" - switch focus between main body and top bar")])
pg4 = ur.Text(
[("green", "H h"), (None, " - display this help dialog")])
pg5 = ur.Text(
[("green", "B b"), (None, " - view available boards")])
pg6 = ur.Text(
[("green", "ESC"),
(
None,
" - go back one screen (exits on MOTD screen)")])
back_btn = ur.AttrMap(
ur.Button("Back", self.button_press, "back"), "red", "reverse")
help_body = ur.Padding(ur.ListBox(ur.SimpleListWalker([
self.div, help_header, self.div, pg1, self.div, pg2,
pg3, pg4, pg5, pg6, self.div, back_btn])),
"center", self.width, 0, self.margin, self.margin)
return ur.AttrMap(ur.Frame(help_body, self.header, self.footer,
"body"), "bg")
def __init__(self, pubpen):
self.pubpen = pubpen
self.save_button = urwid.Button('(S)ave')
self.load_button = urwid.Button('(L)oad')
self.quit_button = urwid.Button('(Q)uit')
self.continue_button = urwid.Button('(ESC) Continue Game')
self.buttons = urwid.SimpleFocusListWalker((
urwid.AttrMap(self.save_button, None, focus_map='reversed'),
urwid.AttrMap(self.load_button, None, focus_map='reversed'),
urwid.AttrMap(self.quit_button, None, focus_map='reversed'),
urwid.AttrMap(self.continue_button, None, focus_map='reversed'),
))
self.entrybox = urwid.ListBox(self.buttons)
# Draw a box around the widget and constrain the widget's size
linebox = urwid.LineBox(self.entrybox, tlcorner='\u2554',
tline='\u2550', trcorner='\u2557',
blcorner='\u255A', bline='\u2550',
brcorner='\u255D', lline='\u2551',
rline='\u2551')
padding = urwid.Padding(linebox, align='center',
width=len(self.continue_button.get_label()) + 6)
filler = urwid.Filler(padding, valign='middle',
height=len(self.buttons) + 2)
outer_layout = LineBox(filler, lline=None, blcorner='?',
tlcorner='?', trcorner='\u252c',
brcorner='\u2524')
super().__init__(outer_layout)
urwid.connect_signal(self.save_button, 'click', self.save_game)
urwid.connect_signal(self.load_button, 'click', self.load_game)
urwid.connect_signal(self.quit_button, 'click', self.quit_client)
urwid.connect_signal(self.continue_button, 'click', self.continue_game)
def __init__(self, pubpen):
self.pubpen = pubpen
username_label = urwid.Text('Username: ', align='right')
password_label = urwid.Text('Password: ', align='right')
self.username = urwid.Edit()
self.password = urwid.Edit()
login_button = urwid.Button('Login')
decorated_login_button = urwid.AttrMap(login_button, None, focus_map='reversed')
quit_button = urwid.Button('Quit')
decorated_quit_button = urwid.AttrMap(quit_button, None, focus_map='reversed')
buttons = urwid.Columns((
(len('Login') + 4, decorated_login_button),
(len('Quit') + 4, decorated_quit_button),
), focus_column=1)
labels = urwid.Pile([username_label, password_label])
self.fields = urwid.Pile([self.username, self.password, buttons],
focus_item=0)
entry_box = urwid.Columns([labels, self.fields])
self.status_message = urwid.Text(' ', align='center')
entry_with_status = urwid.Pile([entry_box, self.status_message])
padded_entry_with_status = urwid.Padding(entry_with_status, align='center')
self.display = urwid.Filler(padded_entry_with_status, valign='middle')
decorate = urwid.LineBox(self.display)
super().__init__(decorate)
self.focusable_widgets = (w for w in itertools.cycle((
((self.fields, 1),),
((self.fields, 2), (buttons, 0)),
((self.fields, 2), (buttons, 1)),
((self.fields, 0),)
)))
urwid.connect_signal(login_button, 'click', self.attempt_login)
urwid.connect_signal(quit_button, 'click', self.quit)
self.pubpen.subscribe('user.login_success', self.handle_login_success)
self.pubpen.subscribe('user.login_failure', self.handle_login_failure)
def generate_display_widget(self, size):
p = super(MyGridFlow, self).generate_display_widget(size)
for item in p.contents:
if isinstance(item[0], urwid.Padding):
c = item[0].original_widget
if isinstance(c, urwid.Columns):
if c.focus_position == 0 and not c.contents[0][0].selectable():
for i, w in enumerate(c.contents):
if w[0].selectable():
c.focus_position = i
break
return p
def get_widget(self):
txt = urwid.Text(self.content, align=self.align)
if self.padding[0] > 0 or self.padding[1] > 0:
txt = urwid.Padding(
txt, left=self.padding[0], right=self.padding[1])
return urwid.AttrMap(txt, self.attr_map)
def __init__(self, chat_widget):
self.chat_widget = chat_widget
self.list_walker = urwid.SimpleListWalker([])
self.w_listbox = urwid.ListBox(self.list_walker)
self.update_list()
self.__super.__init__(urwid.Padding(self.w_listbox, left=2))
keymaps.GLOBAL.add_command("redraw", self.update_list)
def updlst(*args, **kwargs):
self.update_list()
self.chat_widget.discord.add_event_handler("on_member_join", updlst)
self.chat_widget.discord.add_event_handler("on_member_remove", updlst)
self.chat_widget.discord.add_event_handler("on_member_update", updlst)
def update_list(self):
async def callback():
servers = set()
memberset = set()
for ch in self.chat_widget.channels:
servers.add(ch.server)
for serv in servers:
for member in serv.members:
memberset.add(member)
items = []
on = []
idle = []
off = []
for member in memberset:
if member.status == discord.Status.online:
on.append(member)
if member.status == discord.Status.offline:
off.append(member)
if member.status == discord.Status.idle:
idle.append(member)
members = on + idle + off
for member in members:
items.append(
urwid.AttrMap(
urwid.Padding(
urwid.Text(member.display_name), left=1, right=1),
self._get_user_attr(member),
self._get_user_attr(member)))
self.list_walker[:] = items
self.chat_widget.discord.async(callback())
def pad(widget, left=2, right=2):
return urwid.Padding(widget, left=left, right=right)
def __init__(self, text, vertical_padding=True):
content = [urwid.Padding(self.get_content(text), left=3, right=3)]
if vertical_padding:
content = [DIV] + content + [DIV]
lbox = urwid.LineBox(urwid.Pile(content))
self.__super.__init__(urwid.AttrMap(urwid.Pile(
[lbox]), 'image button', 'image button focus'))
def __init__(self, pic, text):
content = self.get_content(text)
lbox = urwid.LineBox(urwid.Pile([DIV, urwid.Padding(
urwid.Columns([(8, pic), content], 4), left=3, right=3), DIV]))
self.__super.__init__(urwid.AttrMap(urwid.Pile(
[lbox]), 'image button', 'image button focus'))
def __init__(self, label="", label_width=15, next_callback=False):
self.label, self.next_callback = label, next_callback
self.edit = urwid.Padding(urwid.Edit(), left=1, right=1)
label = urwid.LineBox(
urwid.Text(label),
tlcorner=' ',
tline=' ',
lline=' ',
trcorner=' ',
blcorner=' ',
rline=' ',
brcorner=' ',
bline=' ')
lbox = urwid.AttrMap(
urwid.LineBox(
self.edit,
tlcorner=' ',
tline=' ',
lline=' ',
trcorner=' ',
blcorner=' ',
rline=' ',
brcorner=' '),
'input',
'input focus')
cols = urwid.Columns([(label_width, label), lbox])
urwid.WidgetWrap.__init__(self, cols)
def __init__(self, result):
self.result = result
self.total = len(result)
self.update_view('next_callback')
walker = urwid.SimpleListWalker([urwid.Padding(self.top_columns, left=3, right=3),
self.test_result])
adapter = urwid.BoxAdapter(urwid.ListBox(walker), height=14)
urwid.WidgetWrap.__init__(self, adapter)
def _greedy_spacer():
return urwid.Padding(urwid.Text(''))
def make_message_body(self, message, no_action=False):
"""
Returns the widgets that comprise a message in a thread, including the
text body, author info and the action button
"""
info = "@ " + self.timestring(message["created"])
if message["edited"]:
info += " [edited]"
if no_action:
callback = ignore
name = urwid_rainbows("~SYSTEM", True)
color = "0"
else:
callback = self.on_post
name = urwid.Text("~{}".format(self.usermap[message["author"]]["user_name"]))
color = str(self.usermap[message["author"]]["color"])
post = str(message["post_id"])
head = urwid.Columns([
(2 + len(post), urwid.AttrMap(
cute_button(">" + post, callback, message), "button", "hover")),
(len(name._text) + 1, urwid.AttrMap(name, color)),
urwid.AttrMap(urwid.Text(info), "dim")
])
head.message = message
return [
head,
urwid.Divider(),
urwid.Padding(
MessageBody(message),
width=self.prefs["max_text_width"]),
urwid.Divider(),
urwid.AttrMap(urwid.Divider("-"), "dim")
]
def __init__(self, mod: Mod, *callbacks: Iterable[ModItemCallback]):
"""Wrap mod in the set of display widgets.
Keyword arguments:
mod: The :class:`Mod` to be wrapped.
callbacks: The functions to be called when this object
is selected.
"""
btn_prefix = ' ? '
# Construct button (the selectable part)
btn = urwid.Button('')
btn._w = urwid.AttrMap(
urwid.SelectableIcon([btn_prefix, mod.name], 2),
'title', 'title_focus',
)
for callback in callbacks:
urwid.connect_signal(btn, 'click', callback, user_args=[mod])
# Construct the mod summary
text = urwid.Padding(
urwid.AttrMap(urwid.Text(mod.summary), 'description'),
left=len(btn_prefix)*2,
)
pile = btn, text
super().__init__(pile)
rosbag-record-param-generator.py 文件源码
项目:my_ros_tools
作者: groundmelon
项目源码
文件源码
阅读 31
收藏 0
点赞 0
评论 0
def __init__(self, node_name, topics):
self.node_name = node_name
self.child_widgets = [
urwid.Padding(TopicCheckBox(topic, self), align='left', left=2) for topic in topics]
super(NodeCheckBox, self).__init__(
node_name, state=False, has_mixed=True, on_state_change=None)
for chkbox in self.get_child_chkboxes():
urwid.connect_signal(chkbox, 'change', self.child_changed)