多个 python kivy Switch widgets with loop - 但只有一个可以是 activated/deactivated
multiple python kivy Switch widgets with loop - but only one can be activated/deactivated
我想用多个 Switch
小部件制作一个 python
kivy
gui。
问题是,当我 运行 我的代码时,只有 Switch
个小部件 (my switch 3
) 中的一个可以工作。具体来说,我可以毫无问题地打开和关闭 my switch 3
,但是如果我尝试打开 my switch 2
或 my switch 1
,则没有任何反应。
感谢您的帮助!
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.switch import Switch
class SwitchClass(FloatLayout):
def __init__(self, **kwargs):
super(SwitchClass, self).__init__(**kwargs)
self.size=(600, 200)
switch_widgets = [('my switch 1', switch1_callback),
('my switch 2', switch2_callback),
('my switch 3', switch3_callback)]
for increment, switch_widget in enumerate(switch_widgets):
self.add_widget(Label(text = switch_widget[0], pos=(25, increment*50+50)))
self.settings_sample = Switch(active = False, pos=(125, increment*50+50))
self.add_widget(self.settings_sample)
self.settings_sample.bind(active = switch_widget[1])
def switch1_callback(switchObject, switchValue):
pass
def switch2_callback(switchObject, switchValue):
pass
def switch3_callback(switchObject, switchValue):
pass
class SwitchApp(App):
def build(self):
return SwitchClass()
if __name__ == '__main__':
SwitchApp().run()
问题是每个 Label
和 Switch
小部件的默认 size_hint
of (1,1)
意味着它们都填满了整个 SwitchClass
.所以最后添加的 Switch
('my switch 3'
),首先获得鼠标点击并在不允许其他 Switch
小部件机会的情况下声明它。要修复它,只需为这些小部件指定一个大小,如下所示:
class SwitchClass(FloatLayout):
def __init__(self, **kwargs):
super(SwitchClass, self).__init__(**kwargs)
self.size = (600, 200)
switch_widgets = [('my switch 1', switch1_callback),
('my switch 2', switch2_callback),
('my switch 3', switch3_callback)]
for increment, switch_widget in enumerate(switch_widgets):
print(increment, switch_widget)
# provide sizes for the widgets:
self.add_widget(Label(text=switch_widget[0], pos=(25, increment * 50 + 50), size_hint=(None, None), size=(100, 50)))
self.settings_sample = Switch(active=False, pos=(125, increment * 50 + 50), size_hint=(None, None), size=(100, 50))
self.add_widget(self.settings_sample)
self.settings_sample.bind(active=switch_widget[1])
我想用多个 Switch
小部件制作一个 python
kivy
gui。
问题是,当我 运行 我的代码时,只有 Switch
个小部件 (my switch 3
) 中的一个可以工作。具体来说,我可以毫无问题地打开和关闭 my switch 3
,但是如果我尝试打开 my switch 2
或 my switch 1
,则没有任何反应。
感谢您的帮助!
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.switch import Switch
class SwitchClass(FloatLayout):
def __init__(self, **kwargs):
super(SwitchClass, self).__init__(**kwargs)
self.size=(600, 200)
switch_widgets = [('my switch 1', switch1_callback),
('my switch 2', switch2_callback),
('my switch 3', switch3_callback)]
for increment, switch_widget in enumerate(switch_widgets):
self.add_widget(Label(text = switch_widget[0], pos=(25, increment*50+50)))
self.settings_sample = Switch(active = False, pos=(125, increment*50+50))
self.add_widget(self.settings_sample)
self.settings_sample.bind(active = switch_widget[1])
def switch1_callback(switchObject, switchValue):
pass
def switch2_callback(switchObject, switchValue):
pass
def switch3_callback(switchObject, switchValue):
pass
class SwitchApp(App):
def build(self):
return SwitchClass()
if __name__ == '__main__':
SwitchApp().run()
问题是每个 Label
和 Switch
小部件的默认 size_hint
of (1,1)
意味着它们都填满了整个 SwitchClass
.所以最后添加的 Switch
('my switch 3'
),首先获得鼠标点击并在不允许其他 Switch
小部件机会的情况下声明它。要修复它,只需为这些小部件指定一个大小,如下所示:
class SwitchClass(FloatLayout):
def __init__(self, **kwargs):
super(SwitchClass, self).__init__(**kwargs)
self.size = (600, 200)
switch_widgets = [('my switch 1', switch1_callback),
('my switch 2', switch2_callback),
('my switch 3', switch3_callback)]
for increment, switch_widget in enumerate(switch_widgets):
print(increment, switch_widget)
# provide sizes for the widgets:
self.add_widget(Label(text=switch_widget[0], pos=(25, increment * 50 + 50), size_hint=(None, None), size=(100, 50)))
self.settings_sample = Switch(active=False, pos=(125, increment * 50 + 50), size_hint=(None, None), size=(100, 50))
self.add_widget(self.settings_sample)
self.settings_sample.bind(active=switch_widget[1])