我想做一个有多个Switch部件的python kivy图形用户界面。
问题是,当我运行代码时,只有一个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()发布于 2021-09-29 20:41:54
问题是,每个Label和Switch小部件的(1,1)的默认size_hint意味着它们都填充了整个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])https://stackoverflow.com/questions/69377264
复制相似问题