【发布时间】:2020-12-04 16:33:02
【问题描述】:
我正在为文字冒险游戏构建 UI。我希望我最上面的小部件能够处理简单快捷方式的按键。例如,“输入”以打开输入字段。但如果输入字段是当前焦点小部件,我希望“输入”按键发出连接信号。
有没有办法将按键传递给当前焦点小部件,而无需容器先处理它?我能想到的唯一解决方案如下:
class UserInput(urwid.Edit):
signals = ['submit']
def __init__(self):
super().__init__(u">> ", wrap='clip')
def keypress(self, size, key):
if key == 'enter':
self._emit('submit')
else:
super().keypress(size, key)
class Container(urwid.Frame):
def keypress(self, size, key):
# pass keys with double binding if focus widget is input field
if isinstance(self.focus, urwid.Edit):
pass
else:
# Move Player
if key in ['w', 'a', 's', 'd', 'q', 'e']:
self.handle_userInput(key)
# Append input field to bottom of ListWalker
elif key in [' ', 'enter']:
self.textBox.show_inputField()
...
# Open Menu in side panel
if key == 'esc':
self.switch_infoTab('menu')
# pass unhandled keys to base class method
else:
super().keypress(size, key)
我认为Container.keypress 开头的类型检查很笨拙。一个更好的解决方案的提示将不胜感激。
【问题讨论】: