【问题标题】:Pulling content from a selected item in a ListBox (urwid)从列表框中的选定项目中提取内容(urwid)
【发布时间】:2018-03-26 19:52:31
【问题描述】:

我正在 urwid 中创建一个 ListBox,其中每个项目都是从 URL 列表中提取的 URL。选择一个项目并单击 ENTER 后,我想提取 URL 并在浏览器中打开它。到目前为止,这是我的代码:

class SelectableText(urwid.Text):
    def selectable(self):
        return True

    def keypress(self, size, key):
        return key

def handle_input(input):
    if input == "": # Open link
        focus_widget, idx = content_container.get_focus()
        # TODO: Open link from focus_widget
    elif input in ('q', 'Q'): # Quit
        raise urwid.ExitMainLoop()

palette = [
  ('menu', 'black', 'dark cyan', 'standout'),
  ('reveal focus', 'black', 'dark cyan', 'standout')]
menu = urwid.Text([
    u'\n',
    ('menu', u' ENTER '), ('light gray', u" Open link "),
    ('menu', u' Q '), ('light gray', u" Quit"),
])

list_of_urls = ["http://thisisalink.com/", ...]
items = list(map(lambda url: urwid.AttrMap(SelectableText(url), None, "reveal focus"), list_of_urls))
content = urwid.SimpleListWalker(items)
content_container = urwid.ListBox(content)

layout = urwid.Frame(body=content_container, footer=menu)

main_loop = urwid.MainLoop(layout, palette, unhandled_input=handle_input)
main_loop.run()

问题出在handle_input(input)。如何从content_container.get_focus() 的结果中提取实际 URL?

【问题讨论】:

    标签: python listbox command-line-interface listboxitem urwid


    【解决方案1】:

    focus_widget 中,您有包装文本小部件的 AttrMap 对象。

    您可以使用.text 属性从urwid.Text 小部件获取文本内容,也可以使用.base_widget 属性获取由urwid.AttrMap 包装的小部件。

    还要注意,您需要检查输入是否等于enter,以检查 Enter 键

    def handle_input(input):
        if input == "enter": # Open link
            focus_widget, idx = content_container.get_focus()
            url = focus_widget.base_widget.text
            import webbrowser
            webbrowser.open(url)
        elif input in ('q', 'Q'): # Quit
            raise urwid.ExitMainLoop()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-03
      相关资源
      最近更新 更多