如何解决如何让 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 举报,一经查实,本站将立刻删除。