Как сделать чат как пользовательский интерфейс с помощью Python Urwid?

1

Я могу реализовать демоны чата с помощью gevent и zeromq, но я бы хотел создать для них консольный интерфейс.

Моя первая попытка с ncurses завершилась неудачно, поэтому я попробовал Urwid и нашел что проект nigiri шел именно так, как я хотел:

Изображение 174551

Я изучил исходный код, но, не знакомый с программированием на консольном интерфейсе, мне не удалось найти часть, которая создавала этот результат (особенно потому, что она использовала несколько вкладок), хотя я думаю, что мне нужно играть с подключить сигнал.

Есть ли у кого-нибудь фрагмент, который может это сделать?

Мне не нужна вся программа, я могу обрабатывать сообщение, демоны, параметры и все остальное самостоятельно.

Просто основы настройки пользовательского интерфейса, введите текст внизу и асинхронно уведомите верхнюю панель, чтобы добавить текст, пока он не блокирует нижний вывод.

Спасибо

Теги:
console
user-interface
chat
urwid

2 ответа

4
Лучший ответ

При вычислении, если вы не умны, вам нужно быть терпеливым. Я просто применил старый старый ключ try/except к моему методу программирования:

  • удалите что-то из источника, не связанного с моей функцией.
  • если все в порядке, перейдите к 1, пока не останется только основной код.
  • если он сбой, понять эту часть и почему это необходимо и заменить ее кодом, который соответствует моим потребностям, а затем вернуться к 2

Я просто удалил исходный код nigiri до тех пор, пока он не поместится в один файл.

Это работает. Теперь я должен выяснить, как сделать общие циклы urwid и zeromq хорошими вместе.

  • 0
    Я знаю, что это 3 года, но могу ли я спросить вас, если вы придумали простой способ сделать это? Этот вопрос задавался много, но никто еще не опубликовал рабочий ответ :( Спасибо!
  • 0
    Вот обновление, которое не падает на текущих версиях urwid / Python: gist.github.com/MarcelWaldvogel/…
-3

7 лет спустя, но я наткнулся на эту тему, пытаясь сделать что-то похожее, и обнаружил, что это может быть именно то, что вам нужно.

if __name__=='__main__':
    class TestCmd(Command):
        def do_echo(self, *args):
            '''echo - Just echos all arguments'''
            return ' '.join(args)
        def do_raise(self, *args):
            raise Exception('Some Error')

    c=Commander('Test', cmd_cb=TestCmd())

    #Test asynch output -  e.g. comming from different thread
    import time
    def run():
        while True:
            time.sleep(1)
            c.output('Tick', 'green')
    t=Thread(target=run)
    t.daemon=True
    t.start()

    #start main loop
    c.loop()

Ссылка: http://zderadicka.eu/terminal-interfaces-in-python/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню