如何让urwid呈现一个嵌套在Filler和WidgetWrap中的文本小部件?

2024-06-17 09:59:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是包装Urwid的文本小部件以创建我自己的自定义小部件。要做到这一点,我需要将文本小部件包装在填充小部件中,以便能够呈现正确的大小

在这个示例代码中,我希望在屏幕上看到“test”,然后按下“wasd”键。相反,我什么也没看到。日志记录告诉我,我正在按keypress中的代码,之前的调试表明我正在按文本小部件的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()

Tags: key代码texttest文本selfif部件
1条回答
网友
1楼 · 发布于 2024-06-17 09:59:17

嗯,我看不出代码有任何问题,当我在Python 3.5.2和Urwid2.1.2以及Urwid1.3.1中运行它时,它对我来说是有效的(我两个都试过了)。我看到一行显示“test”,按键后切换到显示“w”等

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

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

相关问题 更多 >