Interacción entre los widgets de Kivy en Python

Estoy haciendo un proyecto usando kivy pero tengo un problema con las casillas de verificación. Al principio estoy tratando de hacer el progtwig como encoding en python (sé que no está limpio, pero entiendo más) Y tengo una primera pantalla con esta encoding:

from kivy.app import App from kivy.uix.label import Label from kivy.uix.gridlayout import GridLayout from kivy.uix.floatlayout import FloatLayout from kivy.uix.textinput import TextInput from kivy.uix.button import Button from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition from kivy.uix.checkbox import CheckBox class MainScreen(GridLayout): def __init__(self,**kwargs): e=[] super(MainScreen, self).__init__(**kwargs) self.cols=2 def on_checkbox_active(checkbox, value): if value: e.append(value) print e else: print('The checkbox', checkbox, 'is inactive') self.add_widget(Label(text='Inserta assignatures desitjades',font_size=35)) self.add_widget(Label(text='')) ch1 = CheckBox() self.add_widget(ch1) self.add_widget(Label(text='Termotecnia')) ch2 = CheckBox() self.add_widget(ch2) self.add_widget(Label(text='Termotecnia')) ch3 = CheckBox() self.add_widget(ch3) self.add_widget(Label(text='Termotecnia')) ch4 = CheckBox() self.add_widget(ch4) self.add_widget(Label(text='Termotecnia')) b1=Button(text='Exit',background_color=[0.7,0.7,1,1],font_size=24) self.add_widget(b1) b2=Button(text='Next',font_size=24,font_color=[1,3,4,0],background_color=[1,2,3,6]) self.add_widget(b2) ch1.bind(active=on_checkbox_active) ch2.bind(active=on_checkbox_active) b1.bind(on_press=exit) b2.bind(on_press=reloaded) ... class SimpleKivy(App): def build(self): return MainScreen() if __name__=='__main__': SimpleKivy().run() 

Quiero seleccionar dos o tres opciones, por ejemplo, y guardarlas para la siguiente pantalla, como un tipo de selección. Si alguien sabe cómo hacerlo y guarda la información para la siguiente pantalla, me ayudará mucho, porque tengo el código de la siguiente pantalla para todas las opciones, pero quiero preseleccionar en la primera pantalla y luego solo uso cual han seleccionado Además, si alguien puede ayudarme, quiero saber hoy para hacer la transición a otra clase (pantalla) cuando se presiona el botón “Siguiente”. Sé que esta pregunta es bastante simple pero soy nuevo en la progtwigción de Kivy y algunos conceptos son bastante difíciles. Gracias.

Lo que quieres es acceder a variables en otras clases. A veces esto puede ser molesto y puedes hacerlo de cualquier manera difícil con todo __init__() y esas cosas, o … aparece una forma más simple: es get_running_app() .

Puede crear un diccionario o algo más, donde puede almacenar cualquier valor al que tengan acceso sus otras clases. Es similar al uso de globals y le cuesta menos líneas de código. Por ejemplo, en su caso, podría usar un diccionario (o diccionarios nesteds, json, …) para almacenar, por ejemplo, 'checkboxes':'' y en cada inicio puede alternar estos valores para hacer casillas de verificación active

Básicamente, todo lo que necesita es a = App.get_running_app() algún lugar y algo para acceder en main – App – class.

Ejemplo:

 from kivy.app import App from kivy.lang import Builder from kivy.uix.screenmanager import ScreenManager, Screen Builder.load_string(''' : MainScreen: name: 'main' AnotherScreen: name: 'another' : BoxLayout: Button: text: 'next screen' on_release: root.parent.current='another' Button: text: 'ping!' on_release: root.ping() : BoxLayout: Button: text: 'previous screen' on_release: root.parent.current='main' Button: text: 'ping!' on_release: root.ping() ''') class MainScreen(Screen): def __init__(self, **kw): super(MainScreen, self).__init__(**kw) self.a = App.get_running_app() def ping(self): print self.a.big_dict['hi'] class AnotherScreen(Screen): def ping(self): b = App.get_running_app() print b.big_dict['hi'] class Root(ScreenManager): pass class SimpleKivy(App): big_dict={'hi':'hi there!'} def build(self): return Root() SimpleKivy().run() 

Puede ver que no hay necesidad de llamar a __init__() , no es necesario escribir más líneas de código si realmente no lo necesita.