我的目标是包装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()
嗯,我看不出代码有任何问题,当我在Python 3.5.2和Urwid2.1.2以及Urwid1.3.1中运行它时,它对我来说是有效的(我两个都试过了)。我看到一行显示“test”,按键后切换到显示“w”等
(我不得不删除basicConfig的encoding关键字参数,但这似乎与Urwid无关)
您使用了哪些版本的Python和Urwid
相关问题 更多 >
编程相关推荐