微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何让 urwid 呈现嵌套在 Filler 和 WidgetWrap 中的 Text 小部件?

如何解决如何让 urwid 呈现嵌套在 Filler 和 WidgetWrap 中的 Text 小部件?

我的目标是包装 Urwid 的文本小部件以创建我自己的自定义小部件。为此,我需要将文本小部件包装在 Filler 小部件中,以便将其呈现为正确的大小。

通过这个示例代码,我希望在我的屏幕上看到“test”,然后是我按下的键,如果它们是“wasd”之一。相反,我什么也看不到。日志记录告诉我我在按键中点击了我的代码,之前的调试显示我点击了文本小部件的 render() 函数并返回了正确的值。

import logging
import urwid

logging.basicConfig(filename='example.log',encoding='utf-8',level=logging.DEBUG)
logger = logging.getLogger(__name__)


class TestWidget(urwid.WidgetWrap):
    def __init__(self):
        self.text_widget = urwid.Text("test")
        super().__init__(urwid.Filler(self.text_widget,valign='top',height='flow'))
        self._selectable = True

    def selectable(self):
        return self._selectable

    def keypress(self,size,key):
        if key in ('w','s','a','d'):
            logger.info(key)
            self.text_widget.set_text(key)
        else:
            return key

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

if __name__ == '__main__':
    logger.info("Starting")
    wid = TestWidget()
    loop = urwid.MainLoop(wid,unhandled_input=show_or_exit,handle_mouse=True)
    loop.run()

解决方法

嗯。我没有发现代码有任何问题,当我在 Python 3.5.2、Urwid 2.1.2 和 Urwid 1.3.1 中运行它时,它对我有用(我都试过)。我看到一行显示“test”,按键后切换为显示“w”等。

(我必须删除 basicConfig 的 encoding 关键字参数,但这似乎与 Urwid 无关)。

您使用了哪些版本的 Python 和 Urwid?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。