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
my.pyCode:
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()
J'ai beau faire des tests et regarder des documentations sur ScreenManager, je ne trouve pas ce qui ne va pas.Code:
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
Merci d'avance !