Bonjour,

Voila, j'ai commencé à apprendre à utiliser Kivy pour faire mes UI, mais je bloque avec l'utilisation des Screen et de ScreenManager. D'après mes recherches, le souci viendrait du fait que j'utilise des classes que j'ai moi-même définis (pas les classes "de bases" de Kivy). En exécutant le code, je reçois cette erreur:
kivy.uix.screenmanager.ScreenManagerException: ScreenManager accepts only Screen widget

Il n'y a pas de documentation sur cette erreur et très peu de problèmes correspondant (ce qui me laisse penser que c'est un problème tout bête :/). Voila mon code, tiré d'un petit jeu que j'ai fait:

Main.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
 
from kivy.config import Config
from kivy.app import App
from kivy.uix.button import Button
from kivy.core.window import Window
from kivy.uix.screenmanager import Screen
from kivy.uix.screenmanager import ScreenManager
from kivy.uix.floatlayout import FloatLayout
 
Config.set('input', 'mouse', 'mouse,multitouch_on_demand')
Window.fullscreen = 'auto'
 
 
class WindowsManager(ScreenManager):
    pass
 
 
class MainUI(Screen):
    pass
 
 
class LoadUI(Screen):
    pass
 
 
class ButtonComputers(Button, ScreenManager):
 
    def on_press(self):
        print("button one pressed")
        self.opacity = 0.75
 
    def on_release(self):
        self.opacity = 1
        ScreenManager.current = "LoadUI"
 
    def on_touch_up(self, touch):
        self.on_release()
 
 
class ButtonIA(Button):
 
    def on_press(self):
        print("button one pressed")
        self.opacity = 0.75
 
    def on_release(self):
        self.opacity = 1
 
    def on_touch_up(self, touch):
        self.on_release()
 
 
class ButtonOnline(Button):
 
    def on_press(self):
        print("button one pressed")
        self.opacity = 0.75
 
    def on_release(self):
        self.opacity = 1
 
    def on_touch_up(self, touch):
        self.on_release()
 
 
wm = WindowsManager()
 
 
class MyApp(App):
 
    def build(self):
        self.icon = "data/images/icon.png"
        return wm
 
 
if __name__ == '__main__':
    MyApp().run()
my.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
 
#:kivy 1.11.1
#:import pickle pickle
WindowsManager:
    LoadUI:
    MainUI:
 
<MainUI>:
    name: "MainUI"
    canvas.before:
        Rectangle:
            source: "data/images/first_backrgound.png"
            size: self.size
 
    ButtonComputers:
        id: btcomputer
        canvas:
            Color:
                rgba: 0.639, 0.647, 0.447, 1
            RoundedRectangle:
                size: self.size
                pos: self.pos
        pos_hint: {"x": 0.3855, "y": 0.48}
        size_hint: 0.19, 0.14
        background_color: 0, 0, 0, 0
        Label:
            font_name: "data/font/Aller_Rg.ttf"
            font_size: "23sp"
            text: "VS  Computers"
            pos: (btcomputer.pos[0] + (btcomputer.pos[0] * 16 / 100), btcomputer.pos[1] + (btcomputer.pos[1] * 2 / 100))
 
    ButtonIA:
        id: btia
        canvas:
            Color:
                rgba: 0.639, 0.647, 0.447, 1
            RoundedRectangle:
                size: self.size
                pos: self.pos
        pos_hint: {"x": 0.3855, "y": 0.29}
        size_hint: 0.19, 0.14
        background_color: 0, 0, 0, 0
        Label:
            font_name: "data/font/Aller_Rg.ttf"
            font_size: "23sp"
            text: "VS  I.A."
            pos: (btia.pos[0] + (btia.pos[0] * 16 / 100), btia.pos[1] + (btia.pos[1] * 5 / 100))
 
    ButtonOnline:
        id: btonline
        canvas:
            Color:
                rgba: 0.639, 0.647, 0.447, 1
            RoundedRectangle:
                size: self.size
                pos: self.pos
        pos_hint: {"x": 0.3855, "y": 0.1}
        size_hint: 0.19, 0.14
        background_color: 0, 0, 0, 0
        Label:
            font_name: "data/font/Aller_Rg.ttf"
            font_size: "23sp"
            text: "Play online"
            pos: (btonline.pos[0] + (btonline.pos[0] * 16 / 100), btonline.pos[1] + (btonline.pos[1] * 5 / 100))
 
    Label:
        pos: -500, 30
        font_name: "data/font/Aller_Rg.ttf"
        halign: "center"
        valign: "middle"
        font_size: "32sp"
        color: 0.715, 0.756, 0.543, 1
        text: "Best score:\n\n{}".format(str(pickle.load(open("data/player_data/scores.dat", "rb"))))
 
<LoadUI>:
    name: "LoadUI"
    canvas:
        Rectangle:
            source: "data/images/first_backrgound.png"
            size: self.size
 
    Label:
        font_name: "data/font/Aller_Rg.ttf"
        halign: "center"
        valign: "middle"
        font_size: "32sp"
        color: 0.715, 0.756, 0.543, 1
        text: "Loading..."
        pos: 500, 500
J'ai beau faire des tests et regarder des documentations sur ScreenManager, je ne trouve pas ce qui ne va pas.
Merci d'avance !