Python 当文本输入在kivy中聚焦时,如何禁用键盘上的按键? 在kivy中,您可以在键入时禁用键盘事件吗?

Python 当文本输入在kivy中聚焦时,如何禁用键盘上的按键? 在kivy中,您可以在键入时禁用键盘事件吗?,python,kivy,Python,Kivy,在我的应用程序中,我按空格键进入下一个屏幕,空格键触发删除当前主窗口小部件并加载新窗口小部件。 我还可以按'E'来显示一个弹出窗口,主窗口小部件的子窗口,,其中包含文本字段 我的问题是,当我的弹出窗口出现并且我在其输入字段中键入内容时,每次我按空格或E键时,它仍然会触发下一个屏幕/弹出功能 现在我用一个全局“pause”bool变量做了一个肮脏的变通,但我觉得我做得不对! 那么,有没有一种方法可以在打字时禁用键盘事件,或者有其他适当的方法来处理这个问题呢 我的代码的(过度)简化版本: class

在我的应用程序中,我按空格键进入下一个屏幕,空格键触发删除当前主窗口小部件并加载新窗口小部件。 我还可以按'E'来显示一个弹出窗口,主窗口小部件的子窗口,,其中包含文本字段

我的问题是,当我的弹出窗口出现并且我在其输入字段中键入内容时,每次我按空格或E键时,它仍然会触发下一个屏幕/弹出功能

现在我用一个全局“pause”bool变量做了一个肮脏的变通,但我觉得我做得不对! 那么,有没有一种方法可以在打字时禁用键盘事件,或者有其他适当的方法来处理这个问题呢

我的代码的(过度)简化版本:

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()