2

我正在使用 Python 开发一个聊天程序,并想为我的客户端添加一些用户友好的界面。事实是我给了自己一个只使用终端的挑战。

所以我找到了urwid可以使用的模块,它是跨平台的,并且在网上有很好的文档记录。

看了手册和模块的教程后,我并没有真正知道如何编写这个界面,但我获得了一些理论知识(小部件,不同类型的对象,屏幕如何分区......)

所以我最终在 stackoverflow 或 github 上找到了一些代码,我找到了一个listBox示例,该示例对屏幕的日志保存部分非常有帮助。

现在我需要在底部创建一个永久输入区域来接收用户的输入。我没有找到有关如何执行此操作的任何代码或讨论。 如何在底部创建一个永久输入区域以接受用户的输入?

任何链接或代码示例将不胜感激!:)

谢谢大家,艾略特

4

1 回答 1

3

教程有几个独立的示例,演示了一些基本功能。

对于一个简单的方法,我可能会建议使用一个Frame对象,focus_part设置为'footer'. 将提示文本移动到主窗口的基本示例:

import urwid

text_str = 'Here are a few previous lines.of text that populate.the main terminal window.Press "return" to add the prompt line to the main window.or press escape to exit.'.replace('.', '\n')

def main():
    my_term = MyTerminal()
    urwid.MainLoop(my_term).run()


class MyTerminal(urwid.WidgetWrap):

    def __init__(self):

        self.screen_text = urwid.Text(text_str)
        self.prompt_text = urwid.Edit('prompt: ', '')
        self._w = urwid.Frame(header=urwid.Pile([urwid.Text('header text'),
                             urwid.Divider()]),
                             body=urwid.ListBox([self.screen_text]),
                             footer=self.prompt_text,
                             focus_part='footer')

    def keypress(self, size, key):    
        if key is 'esc':
            raise urwid.ExitMainLoop()
        if key == 'enter':
            self.screen_text.set_text(self.screen_text.text +
                                      '\n' +
                                      self.prompt_text.edit_text)
            self.prompt_text.edit_text = ''
            return
        super(MyTerminal, self).keypress(size, key)

main()
于 2018-04-10T02:45:41.450 回答