Kivy 开关多次启动弹出窗口
Kivy switch launches popup multiple times
我正在处理一段复杂的代码,但有一个我似乎无法解决的小错误。当用户切换开关时,我希望打开一个弹出窗口。弹出窗口关闭后,开关仍然打开(这就是我想要的)。当用户关闭开关时,弹出窗口再次启动(这不是我想要的)。
我尝试创造一些方法来简单地关闭开关而无需按下它。当我这样做时,弹出窗口仍然会启动。我一直在尝试制作一些条件语句,这些语句仅在开关的先前状态处于非活动状态时才启动弹出窗口。我对这种方法有一些逻辑问题。我觉得开关应该有一些设置,只有在打开时才会启动某些东西。我在 Kivy API 中到处搜索,但没有找到答案。我通常只为此使用一个按钮,因为它可以完全避免这个问题,但我被要求使用一个开关而不是一个按钮,所以我需要让它以某种方式工作。
我拼凑了一个快速应用程序来演示我遇到的问题。只需将代码放入 Python,它应该 运行 就好了。
import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.lang import Builder
from kivy.uix.popup import Popup
from kivy.uix.boxlayout import BoxLayout
import os
Builder.load_string("""
<MyWidget>:
id: my_widget
Switch
text: "open"
on_active: my_widget.launch()
""")
class MyWidget(BoxLayout):
def launch(self):
popup_content = BoxLayout()
example_popup = Popup(
title='Leeeeeeeeeroyy Jenkins!', content=popup_content)
popup_content.add_widget(Button(text='cancel', size_hint=(
None, None), size=(400, 100), on_release=example_popup.dismiss))
example_popup.open()
class MyApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
MyApp().run()
当您 运行 代码时,切换开关,将出现一个弹出窗口。这就是我要的。点击取消按钮,弹出窗口将关闭。您会注意到开关处于开启位置。这就是我要的。当您切换活动开关时,我希望它只是变成非活动状态,但您会注意到它会再次启动弹出窗口。
非常感谢任何帮助!
您可以在 on_active:
规则中检查 Switch
的 active
属性,如果 active
是 True
:
from kivy.app import App
from kivy.uix.button import Button
from kivy.lang import Builder
from kivy.uix.popup import Popup
from kivy.uix.boxlayout import BoxLayout
Builder.load_string("""
<MyWidget>:
id: my_widget
Switch
text: "open"
on_active: if self.active: my_widget.launch()
""")
class MyWidget(BoxLayout):
def launch(self):
popup_content = BoxLayout()
example_popup = Popup(
title='Leeeeeeeeeroyy Jenkins!', content=popup_content)
popup_content.add_widget(Button(text='cancel', size_hint=(
None, None), size=(400, 100), on_release=example_popup.dismiss))
example_popup.open()
class MyApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
MyApp().run()
我正在处理一段复杂的代码,但有一个我似乎无法解决的小错误。当用户切换开关时,我希望打开一个弹出窗口。弹出窗口关闭后,开关仍然打开(这就是我想要的)。当用户关闭开关时,弹出窗口再次启动(这不是我想要的)。
我尝试创造一些方法来简单地关闭开关而无需按下它。当我这样做时,弹出窗口仍然会启动。我一直在尝试制作一些条件语句,这些语句仅在开关的先前状态处于非活动状态时才启动弹出窗口。我对这种方法有一些逻辑问题。我觉得开关应该有一些设置,只有在打开时才会启动某些东西。我在 Kivy API 中到处搜索,但没有找到答案。我通常只为此使用一个按钮,因为它可以完全避免这个问题,但我被要求使用一个开关而不是一个按钮,所以我需要让它以某种方式工作。
我拼凑了一个快速应用程序来演示我遇到的问题。只需将代码放入 Python,它应该 运行 就好了。
import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.lang import Builder
from kivy.uix.popup import Popup
from kivy.uix.boxlayout import BoxLayout
import os
Builder.load_string("""
<MyWidget>:
id: my_widget
Switch
text: "open"
on_active: my_widget.launch()
""")
class MyWidget(BoxLayout):
def launch(self):
popup_content = BoxLayout()
example_popup = Popup(
title='Leeeeeeeeeroyy Jenkins!', content=popup_content)
popup_content.add_widget(Button(text='cancel', size_hint=(
None, None), size=(400, 100), on_release=example_popup.dismiss))
example_popup.open()
class MyApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
MyApp().run()
当您 运行 代码时,切换开关,将出现一个弹出窗口。这就是我要的。点击取消按钮,弹出窗口将关闭。您会注意到开关处于开启位置。这就是我要的。当您切换活动开关时,我希望它只是变成非活动状态,但您会注意到它会再次启动弹出窗口。
非常感谢任何帮助!
您可以在 on_active:
规则中检查 Switch
的 active
属性,如果 active
是 True
:
from kivy.app import App
from kivy.uix.button import Button
from kivy.lang import Builder
from kivy.uix.popup import Popup
from kivy.uix.boxlayout import BoxLayout
Builder.load_string("""
<MyWidget>:
id: my_widget
Switch
text: "open"
on_active: if self.active: my_widget.launch()
""")
class MyWidget(BoxLayout):
def launch(self):
popup_content = BoxLayout()
example_popup = Popup(
title='Leeeeeeeeeroyy Jenkins!', content=popup_content)
popup_content.add_widget(Button(text='cancel', size_hint=(
None, None), size=(400, 100), on_release=example_popup.dismiss))
example_popup.open()
class MyApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
MyApp().run()