J'ai le code suivant provoquant une erreur Attribute lors de l'appel de la méthode open_project à partir d'un bouton dans un ListAdapter.AttributeError lors de l'accès à la méthode depuis ListAdapter dans l'application kivy à l'aide de screenmanager
AttributeError: objet « AppScreenManager » n'a pas d'attribut « open_project »
Comment puis-je accéder à la méthode open_project dans l'écran d'accueil de classe à partir de l'écran actuel?
En main.py je crée l'application:
from kivy.app import App
from manager import AppScreenManager
from startscreen import StartScreen
from kivy.core.window import Window
class PdesignerApp(App):
def build(self):
sm = AppScreenManager()
sm.add_widget(StartScreen())
return sm
if __name__ == "__main__":
PdesignerApp().run()
Fichier manager.py
from kivy.uix.screenmanager import ScreenManager
class AppScreenManager(ScreenManager):
pass
Fichier startscreen.py
from kivy.uix.screenmanager import Screen
from kivy.lang import Builder
from kivy.clock import Clock
Builder.load_file('startscreen.kv')
class StartScreen(Screen):
def __init__(self, **kwargs):
super(StartScreen, self).__init__(**kwargs)
Clock.schedule_once(self.start, 1)
def start(self, *args):
if not self.manager.has_screen('HomeScreen'):
from homescreen import HomeScreen
self.manager.add_widget(HomeScreen())
self.manager.current = 'HomeScreen'
Fichier startscreen.kv
<StartScreen>:
name: 'StartScreen'
BoxLayout:
orientation: "vertical"
Image:
source: './images/splash-foto.jpg'
Ensuite, dans le homescreen.py, j'ai les fragments de code suivants dans la même séquence:
from kivy.uix.listview import ListItemButton
class ProjectButton(ListItemButton):
pass
class HomeScreen(Screen):
#and some definitions here etc.
def __init__(self, **kwargs):
super(HomeScreen, self).__init__(**kwargs)
#and a list of initialisations here
def open_project(self, project):
#and quite some processing code here
Dans le fichier homescreen.kv je donne les résultats suivants:
# File: homescreen.kv
#: import Factory kivy.factory.Factory
#: import homescreen homescreen
#: import ListAdapter kivy.adapters.listadapter.ListAdapter
<ProjectButton>:
background_normal: ''
background_down: './images/ProjList-sel.png'
on_release: app.root.open_project(self.text)
<HomeScreen>:
name: 'HomeScreen'
project_results_list: project_results_list
BoxLayout:
ListView:
id: project_results_list
adapter:
ListAdapter(data=[], args_converter=lambda row_index,
an_obj: {'text': an_obj,'size_hint_y': None,'height': 25},
cls=homescreen.ProjectButton)
Super! Merci pour votre réponse claire et les idées. Maintenant, je comprends comment obtenir des références aux écrans. Merci encore. –