问题描述
我有一个动态屏幕,它是根据您在另一个屏幕上单击的按钮生成的。每当我进入“屏幕”时,问题就不复存在了,按钮会重新生成并添加到现有按钮中。
原因是我使用了on_enter方法,但是由于这些事件在启动应用程序时发生,所以我不知道如何使用on_kv_post。
每次返回该屏幕时如何初始化屏幕?
class ClientEnvsGrid(Screen):
envProp = StringProperty('')
def __init__(self,**kwargs):
super(ClientEnvsGrid,self).__init__(**kwargs)
def on_enter(self,*args):
clientProp = self.manager.get_screen('clientlist').clientProp
try:
client_filepath = os.path.join('clients',clientProp,"environments.json")
client_file = open(client_filepath)
clientdata = json.loads(client_file.read())
print(clientdata)
self.ids.clientlabel.text = clientdata["clientname"]
for envs in clientdata["environments"]:
print(envs["name"])
envbutton = Button(text=envs["name"])
envbutton.bind(on_press=lambda *args: self.pressed('envbtn',*args))
self.ids.environments.add_widget(envbutton)
except:
print("No client data found")
self.manager.current = 'clientlist'
def pressed(self,instance,*args):
self.envProp = args[0].text
解决方法
我已设法对其进行修复,使其在on_leave事件中的GridLayout环境中包含clear_widgets。
v1