LINUX.ORG.RU

Python3, Urwid и менюшки

 , ,


0

2

Вечер добрый.

Пилю менюху для своей питоно3проги на Urwid. Всё бы ничего, но есть проблемы с выходом из цикла Urwid.

Допустим, есть кусок кода из туториала:

import urwid

choices = u'Chapman Cleese Gilliam Idle Jones Palin'.split()

def menu(title, choices):
    body = [urwid.Text(title), urwid.Divider()]
    for c in choices:
        button = urwid.Button(c)
        urwid.connect_signal(button, 'click', item_chosen, c)
        body.append(urwid.AttrMap(button, None, focus_map='reversed'))
    return urwid.ListBox(urwid.SimpleFocusListWalker(body))

def item_chosen(button, choice):
    response = urwid.Text([u'You chose ', choice, u'\n'])
    done = urwid.Button(u'Ok')
    urwid.connect_signal(done, 'click', exit_program)
    main.original_widget = urwid.Filler(urwid.Pile([response,
        urwid.AttrMap(done, None, focus_map='reversed')]))

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

main = urwid.Padding(menu(u'Pythons', choices), left=2, right=2)
top = urwid.Overlay(main, urwid.SolidFill(u'\N{MEDIUM SHADE}'),
    align='center', width=('relative', 60),
    valign='middle', height=('relative', 60),
    min_width=20, min_height=9)
urwid.MainLoop(top, palette=[('reversed', 'standout', '')]).run()
И я не могу реализовать запуск функции (из проги, офкоурс) после выбора пункта меню.

Сейчас не могу предоставить полный исходник, но вопрос таков: как сделать запуск внешней функции и завершение выполнения кода менюшки после выбора чего-либо? raise urwid.ExitMainLoop тупо делает форс-экзит, а это не то, что нужно.

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.