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

Tkinter Python Discussion :

consiel et aide pour implementation


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut consiel et aide pour implementation
    Bonjour,

    Je sais que la categorie ne conviens pas pour ma quesiton. (il serait peut etre judicieux d'ajouter une categorie, programmation python generale).

    Je suis toujorsu sur l'implementation du logiciel pour les medecins. Je voudrais avoir vaut conseil par rapport aux stockages des données concernant les differens patient.

    Se que je pensais faire, c'etait de stocker lesdonnées (nom, prenom, ect...) dans un fichier "information.data). A l'ajout d'un nouveau patient, je créé un dossier, et je créé le fichier contenant les informations. Ensuite le medecin n'a plus qu'a ajouter les fichier des differentes test effectuer par le patient.

    Se que je n'aime pas dans cette solution, c'est que le medecin peut acceder au fichieret donc causer des bug a l'application. L'aventage c'est que ca ne demande pas d'installation de librairie supplementaire et qu'il est tres facile d'ecrire et de lire les fichiers.

    mon probleme dans cette implementation, c'est que je ne sais pas coment lié mon repertoire a ma personne. Je voudrais pouvoir créé une listbox avec tout les noms et prenoms des patients deja inscrit, afin qu'il est plus qu'a choisir la personne. et que a chaque personne je lui mette le chemin d'acces a son fichier pour ensuite pouvoir faire une liste de tout les fichiers exploitables.

    A niveau code pour l'instant j'ai créé une classe personne. en voici le code:
    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
    # -*- coding: cp1252 -*-
    class Personne:  
        def __init__(self):
            self.pathfile = ""
            self.name = ""
            self.firstname = ""
            self.adress = ""
            self.CP = 0
            self.city = ""
            self.telephone = ""
            self.birthday = ""
            self.doctor = ""
     
        # accessors
        def getName(self):
            return self.name
        def getFirstname(self):
            return self.firstname
        def getAdress(self):
            return self.adress
        def getCP(self):
            return self.CP
        def getCity(self):
            return self.city
        def getTelephone(self):
            return self.telephone
        def getBirthday(self):
            return self.birthday
        def getDoctor(self):
            return self.doctor
     
        # mutators
        def setName(self, new_name):
            self.name = new_name
        def setFirstname(self, new_firstname):
            self.firstname = new_firstname
        def setAdress(self, new_adress):
            self.adress = new_adress
        def setCP(self, new_CP):
            self.CP = new_CP
        def setCity(self, new_city):
            self.city = new_city
        def setTelephone(self, new_telephone):
            self.telephone = new_telephone
        def setBirthday(self, new_birthday ):
            self.birthday = new_birthday
        def setDoctor(self, new_doctor):
            self.doctor = new_doctor
     
     
        # permet de mettre a jour les infos de la personne
        def fctUpdateInfo( self, name, firstname, birthday, adress, cp, city, tel, doctor ):
            self.setName( name )
            self.setFirstname( firstname )
            self.setBirthday( birthday )
            self.setAdress( adress )
            self.setCP( cp )
            self.setCity( city )
            self.setTelephone( tel )
            self.setDoctor( doctor )
     
        # permet d'ecrire le fichier à la creation d'un nouveau patient
        def fctWriteInformation( self, path ):
            myfile = open( path, 'w' )
            myfile.write( self.getName() + "\n" )
            myfile.write( self.getFirstname() + "\n" )
            myfile.write( self.getBirthday() + "\n" )
            myfile.write( self.getAdress() + "\n" )
            myfile.write( self.getCP() + "\n" )
            myfile.write( self.getCity() + "\n" )
            myfile.write( self.getTelephone() + "\n" )
            myfile.write( self.getDoctor() + "\n" )
            myfile.close()
     
        # permet de lire le fichier d'un patient
        def fctReadFile():
            myfile = open( path, 'r' )
            setName( myfile.read() )
            setFirstname( myfile.read() )
            setBirthday( myfile.read() )
            setAdress( myfile.read() )
            setCP( myfile.read() )
            setCity( myfile.read() )
            setTelephone( myfile.read() )
            setDoctor( myfile.read() )
            myfile.close()

    Et voici mon interface graphique pour le moment.
    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    # -*- coding: cp1252 -*-
    from Tkinter import *
    from Personne import *
    import tkMessageBox
    import os
    import shutil
     
    patients = []
     
    def fctMakeList():
        return
     
     
     
     
    def onAdd():
        if( txtName.get() == "" ):
            tkMessageBox.showwarning("Error", "Give a name" )
            return
        if( txtFirstname.get() == "" ):
            tkMessageBox.showwarning("Error", "Give a first name" )
            return
        if( txtAdress.get() == "" ):
            tkMessageBox.showwarning("Error", "Give an adress" )
            return
        if( txtCP.get() == "" ):
            tkMessageBox.showwarning("Error", "Give a code postal" )
            return
        if( txtCity.get() == "" ):
            tkMessageBox.showwarning("Error", "Give a city" )
            return
        if( txtTelephone.get() == "" ):
            tkMessageBox.showwarning("Error", "Give a telephone number" )
            return
        if( txtBirthday.get() == "" ):
            tkMessageBox.showwarning("Error", "Give a birth day" )
            return
        if( txtDoctor.get() == "" ):
            tkMessageBox.showwarning("Error", "Give a name of the doctor" )
            return
     
        # add the personne
        one_personne = Personne()
        one_personne.fctUpdateInfo( txtName.get(),txtFirstname.get(),txtBirthday.get(),txtAdress.get(), \
                                    txtCP.get(),txtCity.get(),txtTelephone.get(), txtDoctor.get() )
     
        # create a directory for her
        one_personne.pathfile = one_personne.getName()
        index = 1
        # test if the direcrty with her name exists
        while( os.path.isdir( one_personne.pathfile ) ):# renvoit True si path désigne un répertoire existant
            one_personne.pathfile = one_personne.pathfile + str( index )
            index = index + 1
        os.makedirs(one_personne.pathfile, mode=0777) # créé tous les repertoires qui existent pas
     
        tkMessageBox.showinfo("Information", "The data for are be save in the directory: " + one_personne.pathfile )
     
        # creer un fichier qui va contenir toute les données
        path = one_personne.pathfile + "/private.data"
        one_personne.fctWriteInformation( path )
     
     
    def onDelete():
        answer = tkMessageBox.askyesno("Comfirmation", "Are you sure to delete this directory?")
        if( answer):
            shutil.rmtree(one_personne.pathfile) # suprrime un repertoire non vide
     
    ############################################
    # interface graphique
    ############################################
    window = Tk()
    lName = Label( window, text="Name: " ).grid( row = 0, column = 0, sticky = E)
    txtName = Entry( window )
    txtName.focus()
    txtName.grid(row = 0, column = 1)
     
    lFirstname = Label( window, text="Firstname: " ).grid( row = 0, column = 2, sticky = E)
    txtFirstname = Entry( window )
    txtFirstname.focus()
    txtFirstname.grid(row = 0, column = 3)
     
    lAdress = Label( window, text="Adress: " ).grid( row = 1, column = 0, sticky = E)
    txtAdress = Entry( window )
    txtAdress.focus()
    txtAdress.grid(row = 1, column = 1)
     
    lCP = Label( window, text="Code postal: " ).grid( row = 2, column = 0, sticky = E)
    txtCP = Entry( window )
    txtCP.focus()
    txtCP.grid(row = 2, column = 1)
     
    lCity = Label( window, text="City: " ).grid( row = 2, column = 2, sticky = E)
    txtCity = Entry( window )
    txtCity.focus()
    txtCity.grid(row = 2, column = 3)
     
    lTelephone = Label( window, text="Telephone: " ).grid( row = 3, column = 0, sticky = E)
    txtTelephone = Entry( window )
    txtTelephone.focus()
    txtTelephone.grid(row = 3, column = 1)
     
    lBirthday = Label( window, text="Birth day: ").grid( row = 3, column = 2, sticky = E)
    txtBirthday = Entry( window )
    txtBirthday.focus()
    txtBirthday.grid( row = 3, column = 3)
     
    lDoctor = Label( window, text="Doctor: " ).grid( row = 4, column = 0, sticky = E)
    txtDoctor = Entry( window )
    txtDoctor.focus()
    txtDoctor.grid(row = 4, column = 1)
     
    btnAdd = Button( window, text="Add", command=onAdd )
    btnAdd.grid( row = 5, column = 1 )
     
    btnDelete = Button( window, text="Delete", command=onDelete )
    btnDelete.grid( row = 5, column = 2 )
     
    btnList = Button( window, text="Make list", command=fctMakeList)
    btnList.grid( row = 5, column = 2 )
     
    window.mainloop()


    Je ne souhaite pas encore transformer mon entry nom en listbox. Je voudrais juste que vous m'aidiez a afficher un messagebox avec la liste des noms des patients et a cote le chemin complet d'acces a son dossier. Pour cela il faut ecrire la fonction "fctMakeList"Une fois que j'ai cela il serra facile d'implementer le reste. Ou peut etre avez vous une toute autre idée d'implementation.

    structure du fichier "private.data" pour un nouveau patient:
    nom
    prenom
    date nessance
    adresse
    CP
    ville
    telephone
    medecin traitent

    structure du fichier "private.data" pour un ancien patient:
    nom
    prenom
    date nessance
    adresse
    CP
    ville
    telephone
    medecin traitent

    nom fichier du test
    date et jour du test
    nom medecin qui a encadrer le test
    # commantaire lié au test et aux courbes obtenu
    possibilité d'un evantuel traitement (serie d'excercice a faire) #

    nom fichier du test
    date et jour du test
    nom medecin qui a encadrer le test
    # commantaire lié au test et aux courbes obtenu
    possibilité d'un evantuel traitement (serie d'excercice a faire) #
    ...

    J'espere que c'est claire.
    erci de votre aide

  2. #2
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    Vola j'ai trouvé comment faire se que je cherchais. Je met le code de la fonction au cas ou ca interesserait quelqu'un. Par contre se qui m'embete c'est que le medecin peut ouvrir et ecrire dans le fichier "private.data". Est il possible de le rendre complement fermer a tout le monde a par le programme python???
    Merci de me repondre


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    patients = []
     
    def fctMakeList():
        path = os.getcwd() # permet d'avoir le chemin complet du repertoire courant
        listRep = os.listdir( path ) # permet de recuperer la liste de toutles fichiers et repertoires du repertoire donné
        for one_path in listRep:
            if( not( os.path.isfile( one_path ) ) ): # test si le chemin represente un repertoire
                new_personne = Personne()
                new_personne.pathfile = one_path
                path = new_personne.pathfile + "/private.data"
                new_personne.fctReadFile( path )
                patients.append( new_personne )

  3. #3
    Membre expérimenté
    Avatar de Alain_72
    Inscrit en
    Août 2004
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 180
    Par défaut
    Ta solution ne me paraît pas très sécurisée, ni optimisée.
    Pourquoi n'utilises-tu pas une base de données embarquée de type Sqlite ?
    Tu bénéficierais de la puissance du SQL pour un poids négligeable, et tu éliminerais pas mal de risques de fausses manoeuvres.

  4. #4
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    Le probleme du fichier et comme je l'ai accesseble par tous donc tout peux etre modifier et c'est ce qui me gene.

    Mais pour l'instant le futur utilisarteur doit installer python, gnuplot, la librairie pour utiliser gnuplot avec python en plus une installation pour mettre l'autre parti du logiciel sur un PDA. Ca fait beaucoup de manipulation a faire pour une personne qui ne s'y connais pas vraiment.

    Et je croiq que toute les librairie permettant de faire de la base de données n'est pas installer directement avec python. A moins qu'il y est un moyen de faciliter toute ces intallations, mon patron n'est pas trop optimiste. C'est pour cela que je demandais s'il etait possible de bloquer tout les acces du fichier a par pour le script écrit.

  5. #5
    Membre expérimenté
    Avatar de Alain_72
    Inscrit en
    Août 2004
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 180
    Par défaut
    Si tu packages bien ton application à l'aide de distutils, ton utilisateur n'aura qu'à lancer le setup.py pour installer python et toutes les bibliothèques utilisées.

    Ce serait dommage de brider ton appli rien que pour une question d'installation...

  6. #6
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    bon, je vais essayer avec la BD, j'ai vu q'avec les enought python, on installait Gadffly. que me conseilles tu d'utiliser?

    En sachant que je devrais faire des ajout , suppression et des mise a jour des informations.

    On prevois au maximum un nombre de 3000 personnes a stocker (les info a stocker sont les meme que dans les fichiers).

    Edit: je ne suis pas contre un lien sur un tutorial de se que tu va me conseiller (de francais en preference). Je n'ai fait de la BD que sur Access.

Discussions similaires

  1. [Débutant] Aide pour l'implementation du formule?
    Par genius4evers dans le forum MATLAB
    Réponses: 3
    Dernier message: 27/06/2012, 13h13
  2. Besoin d'aide pour implementer un algo
    Par mobscene dans le forum Langage
    Réponses: 7
    Dernier message: 30/11/2006, 16h17
  3. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05
  4. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

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