- leir,
Bonjour à tous. Depuis quelques semaines, je me suis mis au développement de gui python avec Kivy. J’arrive bien à l’utiliser et j’en suis content. Cependant, j’essaye maintenant de créer un package pour mon application, pour qu’elle soit utilisable facilement sur MacOSX.
Tout va bien tant que je n’ajoute pas à mon application la possibilité d’enregistrer des données, via le JSON storage de Kivy (très simple à utiliser et parfaitement adapté à mes besoins). Si j’ai uniquement de la logique python avec des fichiers .kv, il n’y a aucun problème. L’application est compilée et se lance parfaitement.
Si j’essaie d’ajouter une interaction avec un fichier store.json pour stocker les données utilisateurs, l’application se compile à nouveau sans problème, mais plante systématiquement au démarrage.
J’ai recréé une petite app test pour montrer cela :
# fichier main.py
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.storage.jsonstore import JsonStore
Builder.load_file('screensmanager.kv')
class HomeScreen(Screen):
pass
class IndexScreen(Screen):
pass
class ScreensManager(ScreenManager):
def __init__(self, **kwargs):
super(ScreensManager, self).__init__(**kwargs)
self.add_widget(HomeScreen(name="home"))
self.add_widget(IndexScreen(name="index"))
class PlanningApp(App):
def build(self):
store = JsonStore('store.json')
store.put('test', note='test')
return ScreensManager()
if __name__ == "__main__":
PlanningApp().run()
# fichier screensmanager.kv
<HomeScreen>:
BoxLayout:
Button:
text: 'Switch to Index'
on_press: root.manager.transition.direction = 'left'
on_press: root.manager.current = 'index'
<IndexScreen>:
BoxLayout:
Button:
text: 'Switch to Home'
on_press: root.manager.transition.direction = 'right'
on_press: root.manager.current = 'home'
# fichier testapp.spec (utilisé par pyinstaller)
# -*- mode: python -*-
block_cipher = None
a = Analysis(['main.py'],
pathex=['/Users/leir/Code/testapp'],
binaries=[],
datas=[('screensmanager.kv','.'),
('store.json','.')],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=['_tkinter', 'Tkinter', 'pyenchant', 'twisted'],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
[],
exclude_binaries=True,
name='testapp',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=False )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='testapp')
app = BUNDLE(coll,
name='testapp.app',
icon=None,
bundle_identifier=None)
Ma question est : est-ce que quelqu’un a déjà packagé avec succès une app avec un fichier JSON Storage ?