Python 当文本输入在kivy中聚焦时,如何禁用键盘上的按键? 在kivy中,您可以在键入时禁用键盘事件吗?
在我的应用程序中,我按空格键进入下一个屏幕,空格键触发删除当前主窗口小部件并加载新窗口小部件。 我还可以按'E'来显示一个弹出窗口,主窗口小部件的子窗口,,其中包含文本字段 我的问题是,当我的弹出窗口出现并且我在其输入字段中键入内容时,每次我按空格或E键时,它仍然会触发下一个屏幕/弹出功能 现在我用一个全局“pause”bool变量做了一个肮脏的变通,但我觉得我做得不对! 那么,有没有一种方法可以在打字时禁用键盘事件,或者有其他适当的方法来处理这个问题呢 我的代码的(过度)简化版本:Python 当文本输入在kivy中聚焦时,如何禁用键盘上的按键? 在kivy中,您可以在键入时禁用键盘事件吗?,python,kivy,Python,Kivy,在我的应用程序中,我按空格键进入下一个屏幕,空格键触发删除当前主窗口小部件并加载新窗口小部件。 我还可以按'E'来显示一个弹出窗口,主窗口小部件的子窗口,,其中包含文本字段 我的问题是,当我的弹出窗口出现并且我在其输入字段中键入内容时,每次我按空格或E键时,它仍然会触发下一个屏幕/弹出功能 现在我用一个全局“pause”bool变量做了一个肮脏的变通,但我觉得我做得不对! 那么,有没有一种方法可以在打字时禁用键盘事件,或者有其他适当的方法来处理这个问题呢 我的代码的(过度)简化版本: class
class affichage(GridLayout):
def __init__(self, **kwargs):
super(affichage, self).__init__(**kwargs)
self.popup = EditPopup(self.reponse, self.on_VALIDERpop)
Window.bind(on_key_down=self._on_keyboard_down)
def _on_keyboard_down(self, instance, keyboard, keycode, text, modifiers):
if(text == ' '):
self.nextScreen()
if(text == 'e'):
self.popupOpen()
def popupOpen(self):
self.popup.open()
class EditPopup(Popup):
titre = StringProperty("")
detail = StringProperty("")
def __init__(self,titre, detail, on_VALIDER, **kwargs):
super(EditPopup, self).__init__(**kwargs)
self.titre = titre
self.detail = detail
self.call_on_VALIDER=on_VALIDER
def send_new_details(self, nouvTitre, nouvDescr):
self.call_on_VALIDER(self.titre,
nouvTitre,nouvDescr])
因此,正如建议的那样,我使用了取消绑定功能,它可以工作: 我打电话
窗口。在弹出窗口打开时解除绑定(按键\u向下=self.\u按键盘\u向下)
然后我把键盘用
Window.bind(按下键=self.\u按下键盘)
在弹出窗口关闭时绑定
我必须重写popup.open()和popup.disclose(),我是这样做的:
(注意:我们在编辑弹出窗口中,这是kivy弹出窗口的子类)
是否有可以执行的
unbind
?谢谢,我学习了unbind,它很有效!
def open(*args):
self = args[0]
if len(args) == 2:
self.to_rebind = args[1]
Window.unbind(on_key_down=self.to_rebind)
super(EditPopup,self).open()
def dismiss(self):
if hasattr(self, 'to_rebind'):
Window.bind(on_key_down=self.to_rebind)
super(EditPopup,self).dismiss()