Создание кнопки возврата в urwid - PullRequest
0 голосов
/ 10 октября 2019

Мне трудно понять, как включить функцию возврата к предыдущему «экрану» в urwid.

Я скопировал часть этого кода и немного изменил его, чтобы сделать то, что я хочу, хотяМне бы очень хотелось, если бы я мог добавить кнопку «Назад» или привязку клавиш назад, добавление кнопки / привязки не проблема, я знаю, как это сделать, я возвращаюсь к предыдущему меню / «экрану», который яищу помощи с

чтением документации

def TUI_torrents_list(torrents):
    body = [urwid.Text("InstantTorrent", align='center'), urwid.Divider()]
    for torrent in torrents:
        button = urwid.Button(torrent['title'])
        urwid.connect_signal(button, 'click', TUI_torrent_chosen, torrent)
        body.append(urwid.AttrMap(button, None, focus_map='reversed'))
    return urwid.ListBox(urwid.SimpleFocusListWalker(body))

def TUI_torrent_chosen(button, torrent):
    response = [urwid.Text(
        [
            'Title: {}\n\n'.format(torrent['title']),
            'Seeders: {}\n'.format(torrent['seeders']),
            'Leechers: {}\n'.format(torrent['leechers']),
            'Upload Date: {}\n'.format(torrent['date']),
            'Size: {}\n'.format(torrent['size']),
            'Source: {}\n'.format(torrent['source'])
        ]
    ), urwid.Divider()]
    # TODO: How can I incorperate more buttons in this TUI?
    # Download -> Opens the magnet URI using: open_torrent(mgnt_uri)
    # Back -> Returns to TUI_torrents_list
    copy = urwid.Button('Copy Magnet URI to clipboard')
    urwid.connect_signal(copy, 'click', copy_magnet_uri, torrent) # works

    download = urwid.Button('Download Torrent')
    urwid.connect_signal(download, 'click', open_torrent, torrent['mgnt_uri'])

    # back = urwid.Button('Back')
    # urwid.connect_signal(back, 'click',

    quit = urwid.Button('Quit')
    urwid.connect_signal(quit, 'click', TUI_exit_program)
    buttons = [copy, download, quit]
    for button in buttons:
        response.append(urwid.AttrMap(button, None, focus_map='reversed'))
    main.original_widget = urwid.Filler(urwid.Pile(response))


def TUI_exit_program(button):
    raise urwid.ExitMainLoop()

def TUI_exit_on_q(key):
    if key in ('q', 'Q'):
        raise urwid.ExitMainLoop()

def copy_magnet_uri(button, torrent):
    pyperclip.copy(torrent['mgnt_uri'])


if __name__ == '__main__':
    args = parse_args()
    torrents = []
    if args.query is None:
        # TODO: Replace this with erwid
        args.query = input("Enter your search query\n>_ ").strip()
    torrents += thepiratebay(args.query, args.proxy)
    torrents = sort_torrents(torrents, key='seeders')
    # output(torrents)
    main = urwid.Padding(TUI_torrents_list(torrents), left=2, right=2)
    top = urwid.Overlay(main, urwid.SolidFill(u'\N{MEDIUM SHADE}'),
                        align='center', width=('relative', 80),
                        valign='middle', height=('relative', 80),
                        min_width=20, min_height=9)
    urwid.MainLoop(top, palette=[('reversed', 'standout', '')], unhandled_input=TUI_exit_on_q).run()

1 Ответ

1 голос
/ 11 октября 2019

Решил его с помощью следующего кода и добавив кнопку, которая вызывает эту функцию.

Этот вопрос было невероятно просто решить

def TUI_back_to_torrents_list(button):
    main.original_widget = urwid.Padding(TUI_torrents_list(torrents), left=2, right=2
...