如果这不是一个好问题,请原谅我。我很难理解Python中URWID库中的一个代码。这是本教程中的示例代码之一。 http://urwid.org/tutorial/index.html
1 import urwid
2 def exit_on_q(key):
3 if key in ('q', 'Q'):
4 raise urwid.ExitMainLoop()
5 class QuestionBox(urwid.Filler):
6 def keypress(self, size, key):
7 if key != 'enter':
8 return super(QuestionBox, self).keypress(size, key)
9 self.original_widget = urwid.Text(
10 u"Nice to meet you,\n%s.\n\nPress Q to exit." %
11 edit.edit_text)
12 edit = urwid.Edit(u"What is your name?\n")
13 fill = QuestionBox(edit)
14 loop = urwid.MainLoop(fill, unhandled_input=exit_on_q)
15 loop.run()
我的问题是
1)Keypress功能将击键作为输入。我无法理解代码的哪一行,键击被分配给'key'变量。它在第7行中没有任何初始化直接使用
if key != 'enter':
这怎么可能?
2)在QuestionBox类之外没有调用Keypress函数。即使没有调用函数,为什么它会被执行?
3)新类QuestionBox中没有定义 init 函数。为什么不需要它?我认为它应该在类定义中同时具有 init 和 super 。
4)'keypress'功能中的'size'字段是什么?
提前致谢
答案 0 :(得分:1)
key
是一个参数,因此调用该函数的人最有可能是将最近按下的键传递给它。fill
传递给urwid.MainLoop
,并且QuestionBox
继承自名为Filler
的urwid类,因此可能的解释是MainLoop
正在调用具有适当参数的函数。根据文档(您的链接):“在QuestionBox.keypress()
中,除了ENTER之外的所有按键都会传递给默认的Filler.keypress()
,并将其发送到子Edit.keypress()
方法。”init
也不需要super
。#4的更新:
size
是小部件的大小,但我不确定它的用途是什么。