gpt4 book ai didi

python - 从列表框中选定的项目中提取内容 (urwid)

转载 作者:太空宇宙 更新时间:2023-11-03 13:57:22 25 4
gpt4 key购买 nike

我正在 urwid 中创建一个列表框,其中每个项目都是从 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?

最佳答案

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

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

另请注意,您需要检查输入是否等于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()

关于python - 从列表框中选定的项目中提取内容 (urwid),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49499551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com