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

  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.

  7. #7
    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
    gadfly ça peut aller, mais je suis plutôt partisan de sqlite, qui est plus riche en fonctions SQL.
    Tu ne trouveras aucun tuto en français, ni pour l'un, ni pour l'autre.

    sqlite est supporté en python via la bibliothèque pysqlite que tu pourras télécharger sur ce lien, et son tutoriel bien qu'en anglais est très bien fait. Tu le trouveras sur ce lien.

    Commence par étudier tout cela, et si tu as des questions j'essayerai d'y répondre rapidement...

  8. #8
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    J'ai essayer de créé ma base de données. par contre j'ai pas trouver pour lui dire de créé la bd elle meme mais juste les tables. 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
    from pysqlite2 import dbapi2 as sqlite
     
    bd = sqlite.connect( "dataBase/information") # je veux creer la base de donne dans le repertoire "dataBase" avec le nom "information"
     
    bd.execute( "create table PERSON(numberperson, lastname, firstname, adress, CP, city, telephone, birthday)" ) # info sur le patient
    bd.execute( "create table DOCTOR(numberdoctor, lastname, firstname, bip_number)" ) # info sur les medecin
    bd.execute( "create table RESPONSABLE(numberperson, numberdoctor)" ) # permet de relier la table DOCTOR a la table PERSON
                                                                        # pour savoir qui est le medecin traitent
    bd.execute( "create table ARCHIVE( numberarchive, pathfile, datearchive, heurearchive, comantaire)" ) # info sur une visite
    bd.execute( "create table VISITE( numberperson, numberarchive)" ) # permet de relier la table ARCHIVE et la table PERSON
                                                                    # pour nos permettre le suivit du client
    bd.execute( "create table PRESENT( numberdoctor, numberarchive) " ) # permet de elier la table ARCHIVE et la table DOCTOR
                                                                        # pour savoir le medecin present lors de cette visite
    quand j'essais de l'executer j'ai un probleme au niveau de la ligne 1 voici le message d'erreur:

    Traceback (most recent call last):
    File "C:/Documents and Settings/sdahan.LMAVIB19/Bureau/dossier stage/code_sophie/essais_BD/sql/createbd.py", line 1, in -toplevel-
    from pysqlite2 import dbapi2 as sqlite
    File "C:\Python24\lib\site-packages\pysqlite2\dbapi2.py", line 27, in -toplevel-
    from pysqlite2._sqlite import *
    ImportError: DLL load failed: Le module spécifié est introuvable.


    Je n'ai pas installer la librairie comme tu me l'as demander car pour installer python (et certaine libraire dont j'avais besoin) j'ai installer directement le pack enough_python et la librairie "pysqlite" fait partie du pack. J'ai essayer de faire le chemin ecris et j'ai bien tout. Je ne vois pas d'ou ca peut venir.

    rci de ta precieuse aide (il serait peut etre mieux de communiquer par mail, car a mon avis je n'en suis pas a la derniere question)

  9. #9
    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
    Je ne connais pas le pack d'installation de python dont tu parles, mais il doit comporter une version ancienne (1.x) de sqlite.

    L'importation se faisait alors comme ceci :

    Pour le reste, création de base, de tables etc., pas de grands changements.

    Pour créer une base c'est simple. tu utilises la fonction sqlite.connect(chemin).
    Si elle existe, il s'y connecte, et si elle n'existe pas, il la crée et s'y connecte.

  10. #10
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    Non il comporte la version pySQLite 2.2.2 tiu peux voir ce lien

    J'ai quand meme essayer avec se que tu m'a dit mais ca me donne un autre message d'erreur.

  11. #11
    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
    Citation Envoyé par Edta
    Non il comporte la version pySQLite 2.2.2 tiu peux voir ce lien

    J'ai quand meme essayer avec se que tu m'a dit mais ca me donne un autre message d'erreur.
    Je pense que Python Enthought Edition comporte un bug dans l'installation de pysqlite.

    Je verrai ça ce soir. Je vais installer un win XP et tester le bazar (je suis sous linux).

    Je te tiens au courant...

  12. #12
    Membre chevronné Avatar de cboudy
    Profil pro
    Ingénieur informatique industrielle
    Inscrit en
    Avril 2006
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique industrielle
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 407
    Par défaut
    as tu testé le module pysqlite en lui meme? :

    from pysqlite2 import test
    test.test()

  13. #13
    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
    Effectivement, j'ai testé sur un XP tout propre, et j'ai la même erreur que toi.
    En faisant un après avoir fait un , les packages "_sqlite", "dbapi2" et "test" sont bien détectés, mais impossibles à importer.

    Pas au point le packaging de enthought...

  14. #14
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    en tout cas, pysqlite est maintenant livré de base avec python 2.5

    http://www.developpez.net/forums/sho...light=pysqlite
    http://www.developpez.net/forums/sho...light=pysqlite

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