【问题标题】:How do I change kivy screen content when a condition is met?满足条件时如何更改 kivy 屏幕内容?
【发布时间】:2021-04-08 16:06:07
【问题描述】:

如果基于上一个屏幕上选择的内容,我希望能够更改下一个 kivy 屏幕上的内容。对于一个过于简化的示例,假设屏幕 1 上有一个开关。如果该开关处于活动状态,则屏幕 2 上有一个按钮。如果它处于非活动状态,则屏幕 2 上没有按钮。我该怎么做去做这个工作?

【问题讨论】:

    标签: kivy kivy-language kivymd


    【解决方案1】:

    我个人所做的是像这样保存不同布局的 id:

    本示例中有 2 个屏幕,screen2 包含您要从第一个屏幕访问的网格布局(以更改按钮)。您只需将 id 保存在一个全局变量中,这样您就可以从其他屏幕访问它。

    ids_gridXYZ = ''
    
    
    class gridXYZ(GridLayout): # this gridlayout contains a button with id: "button_id"
        def __init__(self, **kwargs):
            super(gridXYZ, self).__init__(**kwargs)
    
            global ids_gridXYZ
            ids_gridXYZ  = self.ids
    
    
    class screen2(Screen):
        def __init__(self, **kwargs):
            super(screen1, self).__init__(**kwargs)
    
            self.add_widget(gridXYZ())
    
       
    
    
    class screen1(Screen):
        
        def switch_pressed(self, instance, value): #these 3 parameters are important -> dont forget instance or it won't work
            if value is True: #on
                global ids_gridXYZ
                ids_gridXYZ["button_id"].text = "switch_on"
    
    
            else: #off
                global ids_gridXYZ
                ids_gridXYZ["button_id"].text = "switch_off"
                
    
    
        
    
    
    And in the kivy file something like this:
    <Screen1>:
        Switch:
              id: xyz
              active: False
              on_active: root.switch_pressed()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 2021-03-02
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      相关资源
      最近更新 更多