import urwid.curses_display import urwid class Conversation(object): def __init__(self): self.column1_text = urwid.Text("Test...") self.column1_text.set_layout('left', 'clip') self.column1_edit = urwid.Edit(caption="Send: ") self.column1_check = urwid.CheckBox("Link to other",state=True) self.column1 = urwid.ListBox([self.column1_text, self.column1_edit, self.column1_check]) self.column2_text = urwid.Text("Test...") self.column2_text.set_layout('left', 'clip') self.column2_edit = urwid.Edit(caption="Send: ") self.column2_check = urwid.CheckBox("Link to other",state=True) self.column2 = urwid.ListBox([self.column2_text, self.column2_edit, self.column2_check]) self.columns = urwid.Columns([self.column1, self.column2],box_columns=[0,1]) self.body = urwid.Frame(self.columns) self.widget_header = urwid.Text("F1 ... | ... | F8 - EXIT") self.top = urwid.Frame(body=self.body, header=urwid.AttrWrap(self.widget_header,'header')) self.focus_ring = [ [(self.columns, self.column1), (self.column1, 1)], [(self.columns, self.column1), (self.column1, 2)], [(self.columns, self.column2), (self.column2, 1)], [(self.columns, self.column2), (self.column2, 2)] ] def main(self): self.ui = urwid.curses_display.Screen() self.ui.register_palette([ ('header', 'black', 'dark cyan', 'standout'), # ('I say', 'default', 'default', 'bold'), ]) self.ui.run_wrapper( self.run ) def run(self): size = self.ui.get_cols_rows() while True: keys = self.ui.get_input() if "f8" in keys: break for k in keys: if k == "window resize": size = self.ui.get_cols_rows() elif k == "tab": self.focus_ring.reverse() elem = self.focus_ring.pop() for pair in elem: pair[0].set_focus(pair[1]) self.focus_ring.insert(0,elem) self.focus_ring.reverse() else: self.top.keypress( size, k ) self.draw_screen( size ) def draw_screen(self, size): canvas = self.top.render( size, focus=True ) self.ui.draw_screen( size, canvas ) Conversation().main()