首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有循环的多个python kivy Switch小部件-但只能激活/停用一个

具有循环的多个python kivy Switch小部件-但只能激活/停用一个
EN

Stack Overflow用户
提问于 2021-09-29 13:21:24
回答 1查看 22关注 0票数 0

我想做一个有多个Switch部件的python kivy图形用户界面。

问题是,当我运行代码时,只有一个Switch小部件(my switch 3)可以工作。具体地说,我可以打开和关闭my switch 3没有问题,但如果我试图打开my switch 2my switch 1没有任何反应。

谢谢你的帮助!

代码语言:javascript
运行
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-29 20:41:54

问题是,每个LabelSwitch小部件的(1,1)的默认size_hint意味着它们都填充了整个SwitchClass。因此,添加的最后一个Switch ('my switch 3')首先获得鼠标单击并声明它,而不允许其他Switch小部件有机会。要修复它,只需指定这些小部件的大小,如下所示:

代码语言:javascript
运行
复制
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])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69377264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档