如何在 kivy 上切换 2 on_release?
How can I switch between 2 on_release on kivy?
我想知道如何为 1 kivy 按钮赋予两个功能,例如暂停和取消暂停按钮,当我点击暂停时,它会将值从 on_release 更改为另一个功能,并且当您再次单击时,它将返回到第一个,依此类推。
我试过这个:
======= Main.py =======
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
class Main(BoxLayout):
pass
class test(App):
def build(self):
return Main()
def Pause(self):
Main().ids.pause_unpause.on_release = self.Unpause
print('Paused')
def Unpause(self):
Main().ids.pause_unpause.on_release = self.Pause
print('Unpaused')
test().run()
======= test.kv =======
<Main>:
Button:
id: pause_unpause
on_release: app.Pause()
但是他不会切换功能,谁能帮帮我?
您的代码有两个问题:
- 在您的方法中调用
Main()
会创建一个 Main
的新实例,它不是出现在您的 GUI 中的 Main
。因此,在这些新实例上调用任何方法都不会影响您的 GUI。
- 在处理
on_release
事件期间更改 Button 的 on_release
绑定可能会导致意外结果。
我建议只使用单个 on_release
方法来跟踪 paused/unpaused 状态:
class test(App):
is_paused = BooleanProperty(False)
def build(self):
return Main()
def Pause_Unpause(self):
self.is_paused = not self.is_paused
if self.is_paused:
print('Paused')
else:
print('Unpaused')
和对应的kv
:
<Main>:
Button:
id: pause_unpause
on_release: app.Pause_Unpause()
我想知道如何为 1 kivy 按钮赋予两个功能,例如暂停和取消暂停按钮,当我点击暂停时,它会将值从 on_release 更改为另一个功能,并且当您再次单击时,它将返回到第一个,依此类推。
我试过这个:
======= Main.py =======
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
class Main(BoxLayout):
pass
class test(App):
def build(self):
return Main()
def Pause(self):
Main().ids.pause_unpause.on_release = self.Unpause
print('Paused')
def Unpause(self):
Main().ids.pause_unpause.on_release = self.Pause
print('Unpaused')
test().run()
======= test.kv =======
<Main>:
Button:
id: pause_unpause
on_release: app.Pause()
但是他不会切换功能,谁能帮帮我?
您的代码有两个问题:
- 在您的方法中调用
Main()
会创建一个Main
的新实例,它不是出现在您的 GUI 中的Main
。因此,在这些新实例上调用任何方法都不会影响您的 GUI。 - 在处理
on_release
事件期间更改 Button 的on_release
绑定可能会导致意外结果。
我建议只使用单个 on_release
方法来跟踪 paused/unpaused 状态:
class test(App):
is_paused = BooleanProperty(False)
def build(self):
return Main()
def Pause_Unpause(self):
self.is_paused = not self.is_paused
if self.is_paused:
print('Paused')
else:
print('Unpaused')
和对应的kv
:
<Main>:
Button:
id: pause_unpause
on_release: app.Pause_Unpause()