Python urwid.widget() Examples
The following are 14
code examples of urwid.widget().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
urwid
, or try the search function
.
Example #1
Source File: scroll.py From stig with GNU General Public License v3.0 | 6 votes |
def __init__(self, widget): """Box widget that makes a fixed or flow widget vertically scrollable TODO: Focusable widgets are handled, including switching focus, but possibly not intuitively, depending on the arrangement of widgets. When switching focus to a widget that is ouside of the visible part of the original widget, the canvas scrolls up/down to the focused widget. It would be better to scroll until the next focusable widget is in sight first. But for that to work we must somehow obtain a list of focusable rows in the original canvas. """ if not any(s in widget.sizing() for s in (FIXED, FLOW)): raise ValueError('Not a fixed or flow widget: %r' % widget) self._trim_top = 0 self._scroll_action = None self._forward_keypress = None self._old_cursor_coords = None self._rows_max_cached = 0 self.__super.__init__(widget)
Example #2
Source File: scroll.py From stig with GNU General Public License v3.0 | 6 votes |
def rows_max(self, size=None, focus=False): """Return the number of rows for `size` If `size` is not given, the currently rendered number of rows is returned. """ if size is not None: ow = self._original_widget ow_size = self._get_original_widget_size(size) sizing = ow.sizing() if FIXED in sizing: self._rows_max_cached = ow.pack(ow_size, focus)[1] elif FLOW in sizing: self._rows_max_cached = ow.rows(ow_size, focus) else: raise RuntimeError('Not a flow/box widget: %r' % self._original_widget) return self._rows_max_cached
Example #3
Source File: scroll.py From stig with GNU General Public License v3.0 | 6 votes |
def __init__(self, widget, thumb_char=u'\u2588', trough_char=' ', side=SCROLLBAR_RIGHT, width=1): """Box widget that adds a scrollbar to `widget` `widget` must be a box widget with the following methods: - `get_scrollpos` takes the arguments `size` and `focus` and returns the index of the first visible row. - `set_scrollpos` (optional; needed for mouse click support) takes the index of the first visible row. - `rows_max` takes `size` and `focus` and returns the total number of rows `widget` can render. `thumb_char` is the character used for the scrollbar handle. `trough_char` is used for the space above and below the handle. `side` must be 'left' or 'right'. `width` specifies the number of columns the scrollbar uses. """ if BOX not in widget.sizing(): raise ValueError('Not a box widget: %r' % widget) self.__super.__init__(widget) self._thumb_char = thumb_char self._trough_char = trough_char self.scrollbar_side = side self.scrollbar_width = max(1, width) self._original_widget_size = (0, 0)
Example #4
Source File: urwid_scroll.py From gtui with GNU General Public License v3.0 | 6 votes |
def __init__(self, widget): """Box widget that makes a fixed or flow widget vertically scrollable TODO: Focusable widgets are handled, including switching focus, but possibly not intuitively, depending on the arrangement of widgets. When switching focus to a widget that is ouside of the visible part of the original widget, the canvas scrolls up/down to the focused widget. It would be better to scroll until the next focusable widget is in sight first. But for that to work we must somehow obtain a list of focusable rows in the original canvas. """ if not any(s in widget.sizing() for s in (FIXED, FLOW)): raise ValueError('Not a fixed or flow widget: %r' % widget) self._trim_top = 0 self._scroll_action = None self._forward_keypress = None self._old_cursor_coords = None self._rows_max_cached = 0 self.__super.__init__(widget)
Example #5
Source File: urwid_scroll.py From gtui with GNU General Public License v3.0 | 6 votes |
def __init__(self, widget, thumb_char=u'\u2588', trough_char=' ', side=SCROLLBAR_RIGHT, width=1): """Box widget that adds a scrollbar to `widget` `widget` must be a box widget with the following methods: - `get_scrollpos` takes the arguments `size` and `focus` and returns the index of the first visible row. - `set_scrollpos` (optional; needed for mouse click support) takes the index of the first visible row. - `rows_max` takes `size` and `focus` and returns the total number of rows `widget` can render. `thumb_char` is the character used for the scrollbar handle. `trough_char` is used for the space above and below the handle. `side` must be 'left' or 'right'. `width` specifies the number of columns the scrollbar uses. """ if BOX not in widget.sizing(): raise ValueError('Not a box widget: %r' % widget) self.__super.__init__(widget) self._thumb_char = thumb_char self._trough_char = trough_char self.scrollbar_side = side self.scrollbar_width = max(1, width) self._original_widget_size = (0, 0)
Example #6
Source File: test_doctests.py From anyMesh-Python with MIT License | 6 votes |
def load_tests(loader, tests, ignore): module_doctests = [ urwid.widget, urwid.wimp, urwid.decoration, urwid.display_common, urwid.main_loop, urwid.monitored_list, urwid.raw_display, 'urwid.split_repr', # override function with same name urwid.util, urwid.signals, ] for m in module_doctests: tests.addTests(doctest.DocTestSuite(m, optionflags=doctest.ELLIPSIS | doctest.IGNORE_EXCEPTION_DETAIL)) return tests
Example #7
Source File: statcode.py From statcode with MIT License | 5 votes |
def __init__(self, widget): """ Box widget (wrapper) that makes a fixed or flow widget vertically scrollable. """ self._trim_top = 0 self._scroll_action = None self._forward_keypress = None self._old_cursor_coords = None self._rows_max_cached = 0 self.__super.__init__(widget)
Example #8
Source File: statcode.py From statcode with MIT License | 5 votes |
def rows_max(self, size=None, focus=False): if size is not None: ow = self._original_widget ow_size = self._get_original_widget_size(size) sizing = ow.sizing() if FIXED in sizing: self._rows_max_cached = ow.pack(ow_size, focus)[1] elif FLOW in sizing: self._rows_max_cached = ow.rows(ow_size, focus) else: raise RuntimeError("Not a flow/box widget: %r" % self._original_widget) return self._rows_max_cached
Example #9
Source File: scroll.py From stig with GNU General Public License v3.0 | 5 votes |
def keypress(self, size, key): # Maybe offer key to original widget if self._forward_keypress: ow = self._original_widget ow_size = self._get_original_widget_size(size) # Remember previous cursor position if possible if hasattr(ow, 'get_cursor_coords'): self._old_cursor_coords = ow.get_cursor_coords(ow_size) key = ow.keypress(ow_size, key) if key is None: return None # Handle up/down, page up/down, etc command_map = self._command_map if command_map[key] == urwid.CURSOR_UP: self._scroll_action = SCROLL_LINE_UP elif command_map[key] == urwid.CURSOR_DOWN: self._scroll_action = SCROLL_LINE_DOWN elif command_map[key] == urwid.CURSOR_PAGE_UP: self._scroll_action = SCROLL_PAGE_UP elif command_map[key] == urwid.CURSOR_PAGE_DOWN: self._scroll_action = SCROLL_PAGE_DOWN elif command_map[key] == urwid.CURSOR_MAX_LEFT: # 'home' self._scroll_action = SCROLL_TO_TOP elif command_map[key] == urwid.CURSOR_MAX_RIGHT: # 'end' self._scroll_action = SCROLL_TO_END else: return key self._invalidate()
Example #10
Source File: scroll.py From stig with GNU General Public License v3.0 | 5 votes |
def get_scrollpos(self, size=None, focus=False): """Current scrolling position Lower limit is 0, upper limit is the maximum number of rows with the given maxcol minus maxrow. NOTE: The returned value may be too low or too high if the position has changed but the widget wasn't rendered yet. """ return self._trim_top
Example #11
Source File: urwid_scroll.py From gtui with GNU General Public License v3.0 | 5 votes |
def keypress(self, size, key): # Maybe offer key to original widget if self._forward_keypress: ow = self._original_widget ow_size = self._get_original_widget_size(size) # Remember previous cursor position if possible if hasattr(ow, 'get_cursor_coords'): self._old_cursor_coords = ow.get_cursor_coords(ow_size) key = ow.keypress(ow_size, key) if key is None: return None # Handle up/down, page up/down, etc command_map = self._command_map if command_map[key] == urwid.CURSOR_UP: self._scroll_action = SCROLL_LINE_UP elif command_map[key] == urwid.CURSOR_DOWN: self._scroll_action = SCROLL_LINE_DOWN elif command_map[key] == urwid.CURSOR_PAGE_UP: self._scroll_action = SCROLL_PAGE_UP elif command_map[key] == urwid.CURSOR_PAGE_DOWN: self._scroll_action = SCROLL_PAGE_DOWN elif command_map[key] == urwid.CURSOR_MAX_LEFT: # 'home' self._scroll_action = SCROLL_TO_TOP elif command_map[key] == urwid.CURSOR_MAX_RIGHT: # 'end' self._scroll_action = SCROLL_TO_END else: return key self._invalidate() return key
Example #12
Source File: urwid_scroll.py From gtui with GNU General Public License v3.0 | 5 votes |
def get_scrollpos(self, size=None, focus=False): """Current scrolling position Lower limit is 0, upper limit is the maximum number of rows with the given maxcol minus maxrow. NOTE: The returned value may be too low or too high if the position has changed but the widget wasn't rendered yet. """ return self._trim_top
Example #13
Source File: urwid_scroll.py From gtui with GNU General Public License v3.0 | 5 votes |
def rows_max(self, size=None, focus=False): """Return the number of rows for `size` If `size` is not given, the currently rendered number of rows is returned. """ if size is not None: ow = self._original_widget ow_size = self._get_original_widget_size(size) sizing = ow.sizing() if FIXED in sizing: self._rows_max_cached = ow.pack(ow_size, focus)[1] elif FLOW in sizing: self._rows_max_cached = ow.rows(ow_size, focus) else: raise RuntimeError('Not a flow/box widget: %r' % self._original_widget) return self._rows_max_cached
Example #14
Source File: statcode.py From statcode with MIT License | 4 votes |
def render(self, size, focus=False): maxcol, maxrow = size # Render complete original widget ow = self._original_widget ow_size = self._get_original_widget_size(size) canv = urwid.CompositeCanvas(ow.render(ow_size, focus)) canv_cols, canv_rows = canv.cols(), canv.rows() if canv_cols <= maxcol: pad_width = maxcol - canv_cols if pad_width > 0: # Canvas is narrower than available horizontal space canv.pad_trim_left_right(0, pad_width) if canv_rows <= maxrow: fill_height = maxrow - canv_rows if fill_height > 0: # Canvas is lower than available vertical space canv.pad_trim_top_bottom(0, fill_height) if canv_cols <= maxcol and canv_rows <= maxrow: # Canvas is small enough to fit without trimming return canv self._adjust_trim_top(canv, size) # Trim canvas if necessary trim_top = self._trim_top trim_end = canv_rows - maxrow - trim_top trim_right = canv_cols - maxcol if trim_top > 0: canv.trim(trim_top) if trim_end > 0: canv.trim_end(trim_end) if trim_right > 0: canv.pad_trim_left_right(0, -trim_right) # Disable cursor display if cursor is outside of visible canvas parts if canv.cursor is not None: curscol, cursrow = canv.cursor if cursrow >= maxrow or cursrow < 0: canv.cursor = None # Let keypress() know if original_widget should get keys self._forward_keypress = bool(canv.cursor) return canv