我的目标是包装 Urwid 的文本小部件以创建我自己的自定义小部件。为此,我需要将文本小部件包装在 Filler 小部件中,以便将其呈现为正确的大小。
使用此示例代码,我希望在我的屏幕上看到“测试”,然后如果它们是“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()