在python上使用urwid使子窗口小部件获得输入按键
我可以在另一个小部件中创建一个小部件,例如在python上使用urwid使子窗口小部件获得输入按键,python,widget,keypress,urwid,Python,Widget,Keypress,Urwid,我可以在另一个小部件中创建一个小部件,例如urwid.Frame父部件可以作为body子部件作为urwid.Pile小部件。 在这种情况下,当孩子必须处理一些特定的其他键时,父亲应该处理一些输入键 如本功能示例中所示: import urwid class NewFrame(urwid.Frame): def __init__(self, givenBody): super().__init__(urwid.Filler(givenBody, "top&qu
urwid.Frame
父部件可以作为body
子部件作为urwid.Pile
小部件。
在这种情况下,当孩子必须处理一些特定的其他键时,父亲应该处理一些输入键
如本功能示例中所示:
import urwid
class NewFrame(urwid.Frame):
def __init__(self, givenBody):
super().__init__(urwid.Filler(givenBody, "top"))
def keypress(self, size, key):
if key in ('f'):
print("We are in NewFrame object")
return super(NewFrame, self).keypress(size, key)
class NewPile(urwid.Pile):
def __init__(self, givenList):
super().__init__(givenList)
def keypress(self, size, key):
if key in ('p'):
print("We are in NewPile object")
return super(NewPile, self).keypress(size, key)
master_pile = NewPile([
urwid.Text("foo"),
urwid.Divider(u'─'),
])
frame = NewFrame(master_pile)
loop = urwid.MainLoop(frame)
loop.run()
当我按f键时,我可以看到文本
小部件“我们在新框架中”。但是当我按p时,NewPile
文本不会出现,也不会发生任何事情
那么,我如何才能使子小部件获得输入键,特别是当它们没有被父部件的.keypress()
方法匹配时?在NewFrame的keypress()方法中调用master_pile.keypress(),如下所示:
def keypress(self, size, key):
if key in ('f'):
print("We are in NewFrame object")
#return super(NewFrame, self).keypress(size, key)
master_pile.keypress(size, key)
在NewFrame的keypress()方法中,调用master_pile.keypress(),如下所示:
def keypress(self, size, key):
if key in ('f'):
print("We are in NewFrame object")
#return super(NewFrame, self).keypress(size, key)
master_pile.keypress(size, key)
从文档()中我可以看到,一个Pile小部件只有在包含另一个可选择的小部件时才是可选择的(在您的示例中没有) 您应该能够在子类中重写此行为,方法是重写
selectible()
,使其始终可选
我认为Urwid永远不会在小部件不可选择时调用
keypress
,因为小部件只需要在小部件可选择时实现keypress
。根据我从文档中读取的内容()一个堆小部件只有在包含另一个可选择的小部件时才可选择(在您的示例中没有)
您应该能够在子类中重写此行为,方法是重写selectible()
,使其始终可选
我认为Urwid永远不会在小部件不可选择时调用
keypress
,因为小部件只需要在小部件可选择时实现keypress
。但是在任何情况下size
对于master\u pile
都是错误的,对吗?这似乎不是一种“正确”的方法,如果这种方法曾经存在的话……但是在任何情况下,size
对于master\u pile
都是错误的,对吗?这似乎不是一种“正确”的方式,如果这种方式曾经存在的话。。。