【发布时间】:2021-04-08 16:06:07
【问题描述】:
如果基于上一个屏幕上选择的内容,我希望能够更改下一个 kivy 屏幕上的内容。对于一个过于简化的示例,假设屏幕 1 上有一个开关。如果该开关处于活动状态,则屏幕 2 上有一个按钮。如果它处于非活动状态,则屏幕 2 上没有按钮。我该怎么做去做这个工作?
【问题讨论】:
标签: kivy kivy-language kivymd
如果基于上一个屏幕上选择的内容,我希望能够更改下一个 kivy 屏幕上的内容。对于一个过于简化的示例,假设屏幕 1 上有一个开关。如果该开关处于活动状态,则屏幕 2 上有一个按钮。如果它处于非活动状态,则屏幕 2 上没有按钮。我该怎么做去做这个工作?
【问题讨论】:
标签: kivy kivy-language kivymd
我个人所做的是像这样保存不同布局的 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()
【讨论】: