Python Urwid 中的按键功能
Keypress Function in Python Urwid
如果这不是一个好问题,请原谅我。我很难理解 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) 尚未在问题框外调用按键功能 class。即使不调用该函数,为什么它会被执行?
3) 新的 class QuestionBox 中没有定义 init 函数。为什么不需要?我相信它应该在 class 定义中同时具有 init 和 super 。
4) 'keypress' 函数中的 'size' 字段是什么?
提前致谢
key
是一个参数,因此调用该函数的人很可能将最近按下的键传递给它。
- 由于您已将
fill
传递给 urwid.MainLoop
,并且 QuestionBox
继承自名为 Filler
的 urwid class,可能的解释是 MainLoop
正在调用带有适当参数的函数。根据文档(您的 link):"In QuestionBox.keypress()
all keypresses except ENTER are passed along to the default Filler.keypress()
which sends them to the child Edit.keypress()
method."
- 如果在 Python 中的子 class 中未指定构造函数,则会自动调用基础 class 构造函数。因此,既不需要
init
也不需要 super
。
- 至于大小参数,文档中并不清楚它是什么,但进一步查看应该会找到答案。
#4 的更新:
size
是小部件的大小,虽然我不确定它的用途是什么。
如果这不是一个好问题,请原谅我。我很难理解 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) 尚未在问题框外调用按键功能 class。即使不调用该函数,为什么它会被执行?
3) 新的 class QuestionBox 中没有定义 init 函数。为什么不需要?我相信它应该在 class 定义中同时具有 init 和 super 。
4) 'keypress' 函数中的 'size' 字段是什么?
提前致谢
key
是一个参数,因此调用该函数的人很可能将最近按下的键传递给它。- 由于您已将
fill
传递给urwid.MainLoop
,并且QuestionBox
继承自名为Filler
的 urwid class,可能的解释是MainLoop
正在调用带有适当参数的函数。根据文档(您的 link):"InQuestionBox.keypress()
all keypresses except ENTER are passed along to the defaultFiller.keypress()
which sends them to the childEdit.keypress()
method." - 如果在 Python 中的子 class 中未指定构造函数,则会自动调用基础 class 构造函数。因此,既不需要
init
也不需要super
。 - 至于大小参数,文档中并不清楚它是什么,但进一步查看应该会找到答案。
#4 的更新:
size
是小部件的大小,虽然我不确定它的用途是什么。