Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/10/2008, à 17:12

s@mson

python, tkinter, pmw, shelve

Bonjour!

Je fais actuellement une base de donnée avec une interface graphique pour un code de calcul scientifique.

Lorque je lance une simulation, mon code de calcul prend en entrée un fichier, disons "simu1" contenant tous les différents paramètres relatifs à cette simulation. Lorsque je voudrai faire une simulation différente, je donnerai au code de calcul un fichier "simu2" contenant des paramètres différent.

J'ai donc une base de donnée d'un certain nombre de fichier "simuN", contenant des paramètres différents.

Mon outils graphique marche de la façon suivante : je choisis tous mes paramètres à l'aide de widgets apaptés (Entryfield, ComboBox, RadioSelect, Counter...).
Quand j'appuie sur un bouton "Save", je stocke avec shelve dans un fichier "simu" tous mes paramètres ainsi que tout ce qui caractérise l'état de mes widgets. Par exemples, pour un ComboBox, la valeur actuelle, mais aussi la liste entière, pour des boutons radios la position du choix etc...
Quand je choisis un fichier "simu" et que je clique sur un bouton "Load", je récupère tous mes paramètres ainsi que tous mes widgets dans l'état ou ils étaient au moment de cliquer sur "Save".

Tout ça fonctionne, mais ça fait du code un peu lourd et pas pratique, je ne connais pas vraiment les techniques.

Ma question : Quelle est la technique de programmation dans ce cas? C'est à dire pour "sauvegarder l'état complet d'un interface graphique de façon permanente" ?

Merci à ceux qui on eut le courage me lire...

Dernière modification par s@mson (Le 13/10/2008, à 10:41)

Hors ligne

#2 Le 13/10/2008, à 10:49

s@mson

Re : python, tkinter, pmw, shelve

Après quelques tatonnements, voici ce que j'utilise :

map = [ 
    {'fileIndex' : 'CHANGER_ICI',
     'getAtSave' : (lambda : CHANGER_ICI()),
     'setAtLoad' : (lambda v: CHANGER_ICI(v)),
     'defautVal' : CHANGER_ICI},
    #
    {'fileIndex' : 'CHANGER_ICI',
     'getAtSave' : (lambda : CHANGER_ICI()),
     'setAtLoad' : (lambda v: CHANGER_ICI(v)),
     'defautVal' : CHANGER_ICI},
    #
    {'fileIndex' : 'CHANGER_ICI',
     'getAtSave' : (lambda : CHANGER_ICI()),
     'setAtLoad' : (lambda v: CHANGER_ICI(v)),
     'defautVal' : CHANGER_ICI}
]

def save(map,file):
    for m in map:
        file[m['fileIndex']] = m['getAtSave']()
    file.close()

def load(map):
    for m in map:
        if file.has_key(m['fileIndex']):
            m['setAtLoad'](file[m['fileIndex']])
        else:
            m['setAtLoad'](m['defautVal'])
    file.close()

Les boutons save et load appellent les fonctions respectives.

Dernière modification par s@mson (Le 13/10/2008, à 10:51)

Hors ligne