Un modo semplice per ottenere questo risultato è quello di definire il pulsante propria sottoclasse:
class ScreenButton(Button):
screenmanager = ObjectProperty()
def on_press(self, *args):
super(ScreenButton, self).on_press(*args)
self.screenmanager.current = 'whatever'
Il metodo on_press viene chiamato automaticamente quando si preme il pulsante, quindi la proprietà del ScreenManager current
sarà cambiato.
Quindi è possibile avere il codice qualcosa di simile:
sm = ScreenManager()
sc1 = Screen(name='firstscreen')
sc1.add_widget(ScreenButton(screenmanager=sm))
sc2 = Screen(name='whatever')
sc2.add_widget(Label(text='another screen'))
sm.add_widget(sc1)
sm.add_widget(sc2)
Facendo clic sul pulsante dovrebbe cambiare le schermate, come richiesto.
Un altro modo (che è probabilmente il modo in cui il linguaggio kv lo esegue) sarebbe quello di utilizzare manualmente il metodo bind
.
def switching_function(*args):
some_screen_manager.current = 'whatever'
some_button.bind(on_press=switching_function)
Ciò significherebbe che switching_function
viene chiamata ogni volta che viene premuto some_button
. Naturalmente qui c'è molta flessibilità riguardo a come e quando si definisce la funzione, quindi (per esempio) si potrebbe fare qualcosa di più generale come passare lo screenmanager come primo argomento della funzione.
Non ho testato questo codice e non è un'app completa, ma si spera che il significato sia chiaro. Entrambi i metodi dovrebbero funzionare bene, è possibile scegliere il modo che sembra più ragionevole. Potrei costruire un esempio più completo più tardi.
Grazie per la risposta. L'utilizzo della soluzione di sottoclasse mi ha aiutato a ottenere ciò che stavo cercando di fare. Grazie ancora. – Derick