Button 将函数解除绑定到kivy中的按钮

Button 将函数解除绑定到kivy中的按钮,button,kivy,unbind,Button,Kivy,Unbind,考虑以下代码: 从kivy.app导入应用程序 从kivy.uix.boxlayout导入boxlayout 从kivy.uix.button导入按钮 类布局: 定义初始自我,**kwargs: 超级.\uuuuu初始\uuuuu**kwargs x=Buttontext='somebutton' x、 bindon_press=lambda*u:打印“第一次印刷” x、 bindon_press=lambda*u:打印“第二次印刷” self.add_widgetx 定义某物自身,*某物识别:

考虑以下代码:

从kivy.app导入应用程序 从kivy.uix.boxlayout导入boxlayout 从kivy.uix.button导入按钮 类布局: 定义初始自我,**kwargs: 超级.\uuuuu初始\uuuuu**kwargs x=Buttontext='somebutton' x、 bindon_press=lambda*u:打印“第一次印刷” x、 bindon_press=lambda*u:打印“第二次印刷” self.add_widgetx 定义某物自身,*某物识别: 我有东西 FChooserApp类: def buildself: 先返回 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': FChooser.run 此代码的行为是,在我按下“somebutton”按钮后,它会打印:

Second press
First press
所以,我在谷歌上搜索发现我应该使用unbind函数,我添加了以下内容:

从kivy.app导入应用程序 从kivy.uix.boxlayout导入boxlayout 从kivy.uix.button导入按钮 类布局: 定义初始自我,**kwargs: 超级.\uuuuu初始\uuuuu**kwargs x=Buttontext='somebutton' x、 bindon_press=lambda*u:打印“第一次印刷” x、 unbindon_press=lambda*\打印“第一次印刷” x、 bindon_press=lambda*u:打印“第二次印刷” self.add_widgetx 定义某物自身,*某物识别: 我有东西 FChooserApp类: def buildself: 先返回 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': FChooser.run
但是输出没有改变。它仍然是相同的输出。如何释放绑定?这只是一个简单的示例,我打算使用此功能将函数动态绑定和解除绑定到按钮,向同一按钮添加各种功能。

此函数不会解除绑定,因为您没有引用绑定到的函数。使用内联lambda时,该方法引用未保存,因此以后无法使用它解除绑定。 这将通过以下方式起作用:

从kivy.app导入应用程序 从kivy.uix.boxlayout导入boxlayout 从kivy.uix.button导入按钮 类布局: 定义初始自我,**kwargs: 超级.\uuuuu初始\uuuuu**kwargs x=Buttontext='somebutton' x、 bindon_press=self.press1 x、 按unbindon_press=self.press1 x、 bindon_press=self.press2 self.add_widgetx def press1self,*参数: 第一次印刷 def press2self,*参数: 第二印刷机 FChooserApp类: def buildself: 先返回 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': FChooser.run 或者这个:

按1=lambda*\打印“第一次按” 按2=lambda*\打印“第二次按” x=Buttontext='somebutton' x、 bindon_press=按1 x、 解除锁定按=按1 x、 bindon_press=按2
函数不会解除绑定,因为您没有引用绑定到的函数。使用内联lambda时,该方法引用未保存,因此以后无法使用它解除绑定。 这将通过以下方式起作用:

从kivy.app导入应用程序 从kivy.uix.boxlayout导入boxlayout 从kivy.uix.button导入按钮 类布局: 定义初始自我,**kwargs: 超级.\uuuuu初始\uuuuu**kwargs x=Buttontext='somebutton' x、 bindon_press=self.press1 x、 按unbindon_press=self.press1 x、 bindon_press=self.press2 self.add_widgetx def press1self,*参数: 第一次印刷 def press2self,*参数: 第二印刷机 FChooserApp类: def buildself: 先返回 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': FChooser.run 或者这个:

按1=lambda*\打印“第一次按” 按2=lambda*\打印“第二次按” x=Buttontext='somebutton' x、 bindon_press=按1 x、 解除锁定按=按1 x、 bindon_press=按2