IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Stocker un saveState dans un fichier json ?


Sujet :

PyQt Python

  1. #1
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut Stocker un saveState dans un fichier json ?
    Bonsoir à vous,

    après une longue absence, je me remets à pyqt avec plaisir

    mon nouveau soft utilise un fichier json comme fichier de config, j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import json
    self.Configuration = json.load(fichier)
    ...
    json.dump(self.Configuration, fichier, indent=4)
    C'est nickel !

    Mais j'ai une question annexe, j'ai vu que Qt a des façons de lire les fichiers json, cela a t il un intérêt autre que d'utiliser python ?

    Mais j'en viens à ma question principale
    J'ai une gui avec un QDock dedans et je souhaiterai enregistrer l'agencement de la gui.
    Si j'ai bien compris seul saveState / restoreState le permet.
    Mais impossible de sauvegarder ça dans le fichier json...
    j'ai essayé pas mal de trucs différents (genre convertir en string puis à nouveau bytes au chargement) mais sans résultat...

    Est-ce possible ?

    Bon week end à vous !

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Salut,

    J'utilise aussi un json pour Oqapy et pour conserver la dernière position de panneau de boîtes d'outils j'enregistre simplement le chiffre correspondant à sa position.

    Et puis, au démarrage j'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            tool_side = self.core.cfg.get(('startup', 'panel'))
            self.toolpanel = ToolPanel(self)
            self.addDockWidget(Qt.DockWidgetArea(tool_side), self.toolpanel)
    où tool_side vaut 1 ou 2 selon le côté choisit.


    http://pyqt.sourceforge.net/Docs/PyQ...idgetArea-enum

  3. #3
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Salut, merci pour la réponse qui répond partiellement à me demande si je pige bien.

    Car tu sais où est le dock mais pas sa taille ?

    j'ai essayé de faire des resize du dock ou d'autres éléments, mais ça ne fonctionne pas.
    Car en effet ça serait sûrement le plus simple.

    Car c'est le gros intérêt du saveState qui sauvegarde la taille et l'emplacement des widgets.

    Alors il est toujours possible de passer par un fichier autre que json mais j'aimerai que tout ne soit géré que par 1 json.

    EDIT : Quand j'essaie des trucs du genre : https://hustleplay.wordpress.com/201...ary-with-json/
    il ne veut pas me créer le json en me disant : TypeError: Object of type 'bytes' is not JSON serializable
    Car c'était mon idée de départ...

    saveState renvoie un QByteArray qu'il faudrait convertir en int ou str pour le mettre dans le json et refaire le processus inverse.

    EDIT : Il semble que cela fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # Save
            x = self.saveState()
            y = bytes(x.toHex())
            p = y.decode()
     
    # Load
            s = p.encode()
            z = QByteArray().fromHex(s)
            self.restoreState(z)
    Et on peut faire la même chose avec saveGeometry et restoreGeometry pour la taille et la position de la fenêtre.

    Au moins ça fonctionne, mais si quelqu'un à plus simple
    Je voulais utiliser toStdString() ou toInt() pour la class QByteArray mais sans succes...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupération de réquêtes depuis la base et les stocker dans un fichier .json
    Par gunzmokaz dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 05/01/2016, 14h12
  2. stocker un bitmap dans un fichier
    Par zenzo dans le forum Langage
    Réponses: 4
    Dernier message: 25/01/2006, 15h22
  3. Stocker des jpg dans un fichier
    Par jmjmjm dans le forum Langage
    Réponses: 6
    Dernier message: 10/11/2005, 22h07
  4. [XML] stocker des données dans un fichier XML
    Par R3iTt0R dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/05/2005, 16h51
  5. Stocker un record dans un fichier
    Par ushu dans le forum Langage
    Réponses: 7
    Dernier message: 13/12/2002, 15h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo