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

Python Discussion :

Transcrire une requête pydblite pour tkinter


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 17
    Par défaut Transcrire une requête pydblite pour tkinter
    Bonjour à tous,
    Malgres mes recherches sur internet en decortiquant des

    exemples de codes, une haie plus haute que les autres

    m'empeche de continuer, il est vrai que je ne suis pas un

    cheval de course (pas bourricot non plus..), je n'arrive

    pas transcrire en tkinter cette requette
    ************************
    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
    def pydblite():
        from pydblite.pydblite import Base
        # lecture du contenu de la base
        db = Base('annuairetel.pdl')
        # champs nom, prenom, tel
        if db.exists():
            db.open()
     
        # afffiche ce que l on demande ** je cale ici**
     
        for rec in db(nom=' ', prenom=' '):
            print ('NOM =', rec['nom'], 'PRENOM =', rec
     
    ['prenom'], 'TEL =', rec['tel'])
     
    pydblite()
    ********************
    je travaille avec une base pydblite et pour moi je

    mettrais deux 'entry' pour le nom et prenom, et je

    devrais avoir la reponse ( numero tel) dans un label mais

    j'ai du mal à traduite du script python en tkinter et

    donc je cale à la requette.
    auriez vous quelques infos.
    merci à tous

  2. #2
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Bonjour,

    Tout d'abord, Tkinter n'est qu'une bibliothèque graphique (pour créer des fenêtres), du coup je vois pas trop ce que "restranscrire" viendrait faire ici (afficher me semblerait plus correct comme terme ).

    Sinon, le code que tu as donné ne fait que ouvrir la base de données si elle existe, et itérer sur chaque enregistrement, avec le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for rec in db(nom=' ', prenom=' '):
            print ('NOM =', rec['nom'], 'PRENOM =', rec['prenom'], 'TEL =', rec['tel'])
    qui devrait d'ailleurs être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for rec in db:
            print ('NOM =', rec['nom'], 'PRENOM =', rec['prenom'], 'TEL =', rec['tel'])
    à moins que tu ne veuilles récupérer que les enregistrements qui n'ont que le caractère " " comme nom et prénom.

    Bref, rec est vu comme un tableau associatif qui contient tes valeurs, et c'est là qu'il te faudra créer tes éléments Tkinter.


    PS: on a passé l'époque des terminaux qui n'ont que 80 colonnes, tu peux te permettre de faire de longues lignes maintenant

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 17
    Par défaut
    Bonjour
    En faite la base est terminée et peut evoluer, la fenetre TK est crée avec deux "entry" nom + prenom et un label qui doit m'achicher le resultat en cliquant sur un bouton "show" mais je cale sur l'ecriture du code qui devrait effectuer: ouvre la base puis avec le nom et prenom se trouvant dans les 'entry' donne moi le tel.
    Voila ou j'en suis depuis un certain temps, et je cale.
    MERCI POUR COOP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for rec in db(nom='je rentre un nom ', prenom='je rentre un prenom '):
            print ( 'TEL =', rec['tel'])

  4. #4
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Bonjour,

    Pourrait-on voir ce que t'as tenté d'écrire pour interfacer la base de données avec Tkinter ?

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 17
    Par défaut
    Bonjour

    Voici le code en entier, il ne manque que la partie '' afficher la reponse apres avoir entré le nom prenom", j'ecris et je teste, j'efface et je recommence, je decortique des exemples etc, la vie de debutant , j'apprend comme ca.
    Bon WE à tous.



    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
    from tkinter import *
    fen = Tk()
     
    def pydblite():
        from pydblite.pydblite import Base
        # lecture du contenu de la base
        db = Base('numtel.pdl')
        # champs nom, taille
        if db.exists():
            db.open()
     
        # affiche que ce que l on demande
        # ce code fonctionne mais je cale pour la suite, c est a dire entre le nom et prenom dans les deux entry puis avec un bouton SHOW on obtien le resultat dans le label TEL.
        for rec in db(nom='martin', prenom='jacques'):
            print(rec['tel'])
    pydblite()
     
    # nom de la personne que l on recherche
    frame1 = Frame(fen,borderwidth=2,relief=GROOVE)
    frame1.pack(side=LEFT,padx=10,pady=10)
    F1 = LabelFrame(frame1, text = "NOM", labelanchor= N)
    F1.pack(side=LEFT, padx =10, pady = 10)
     
    # prenom de la personne que l on recherche
    frame2 = Frame(fen,borderwidth=2,relief=GROOVE)
    frame2.pack(side=LEFT,padx=10,pady=10)
    F2 = LabelFrame(frame2, text = "PRENOM", labelanchor= N)
    F2.pack(side=LEFT, padx =10, pady = 10)
     
    # reponse - numero de tel correspondant au nom prenom
    frame3 = Frame(fen,borderwidth=2,relief=GROOVE)
    frame3.pack(side=LEFT,padx=10,pady=10)
    F3 = LabelFrame(frame2, text = "TEL", labelanchor= N)
    F3.pack(side=LEFT,padx =10, pady = 10)
     
     
    nom_entry=Entry(frame1, bd=5).pack(side=LEFT)
    prenom_entry=Entry(F2, bd=5).pack(side=LEFT)
    tel_label=Label(F3, bd=5).pack(side=LEFT)
     
    fen.mainloop()

  6. #6
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Bonjour,

    Je te recommande fortement de lire ce cours, notamment la partie sur Tkinter, qui traite notamment du traitement d'évènements (ce dont tu as besoin pour faire ta recherche ), notion que tu n'as visiblement pas assimilée (à la vue de ton code).

    PS: tu devrais à mon avis créer une classe pour ta fenêtre, afin d'organiser ton code un peu mieux que ça (et surtout ça te permetterait de pouvoir créer plusieurs fenêtres par la suite très facilement).

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 17
    Par défaut
    Bonjour
    Merci pour ces quelques infos

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 17
    Par défaut
    Bonjour
    J'ai avancé un petit peu dans le code mais il doit me manquer quelque chose pour le terminer. Voici le message que j'obtiens à la fin. Merci d'avance pour l'aide.

    >>> Exception in Tkinter callback
    Traceback (most recent call last):
    File "C:\Python33\lib\tkinter\__init__.py", line 1489, in __call__
    return self.func(*args)
    TypeError: pydblite() takes 0 positional arguments but 1 was given

    Voici mon 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
    from tkinter import *
    fen = Tk()
     
    def pydblite():
        from pydblite.pydblite import Base
        # lecture du contenu de la base
        db = Base('numtel.pdl')
        # champs nom, taille
        if db.exists():
            db.open()
     
        # la requette - elle fonctionne fonctionne
        for rec in db(nom=''):
            print(rec['tel'])
     
     
    nom = StringVar()
    tel = StringVar()
    # ------------------
     
    def quitter():
        fen.destroy()
     
    # ------------------------------------------------------------------------------
    # frame
    frame_nom = LabelFrame(fen, text = "NOM", labelanchor= N)
    frame_nom.pack(padx =10, pady = 10, side=LEFT)
     
    frame_tel= LabelFrame(fen, text = "TEL", labelanchor= N)
    frame_tel.pack(padx =10, pady = 10, side=LEFT)
    #
    #  entree nom
    entree_nom=Entry(frame_nom, textvariable = nom, bd=5)
    entree_nom.delete(0,END)
    entree_nom.insert(0,'')
    entree_nom.bind("<Return>", pydblite)
    entree_nom.pack()
    #
    # label reponse tel apres action sur la touche ENTER
    label_tel=Label(frame_tel, textvariable = tel)
    label_tel.configure(textvariable='')
    label_tel.pack()
     
    # ------------------------------------------------------------------------------
    bouton_quit=Button(fen, text='Quit', command=quitter).pack(side=BOTTOM)
     
    # ------------------------------------------------------------------------------
    fen.minsize(200,200)
    fen.mainloop()

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 695
    Par défaut
    Salut,

    Lorsque vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    entree_nom.bind("<Return>", pydblite)
    Le callback pydblite recevra un event en argument.
    Et l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
    File "C:\Python33\lib\tkinter\__init__.py", line 1489, in __call__
    return self.func(*args)
    TypeError: pydblite() takes 0 positional arguments but 1 was given
    dit seulement que la fonction n'a pas été déclarée pour recevoir cet argument...
    Plusieurs solutions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def pydblite(*e):
        from pydblite.pydblite import Base
    la fonction reçoit une liste d'arguments optionnels.
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    entree_nom.bind("<Return>", lambda e: pydblite())
    qui créer une fonction qui reçoit l'argument mais appelle la fonction "sans".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 17
    Par défaut
    Bonjour
    J'ai organisé mon code comme on me l'avait dit, j'espere que cela est correcte maintenant, mais je bloque toujours sur la connexion a la base pydblite afin d'afficher le resultat dans le label 'tel'. voici a quoi resemble mon code.
    J'obtiens bien une reponse correcte en rajoutant ce petit bout de code, lors du test, mais rien pas de reponse dans le label 'tel'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        for rec in db(nom='dupond'):
            print(rec['tel'])
    Merci de votre aide.

    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
    # modules
    from tkinter import *
     
    # methodes
    def pydblite(event):
        from pydblite.pydblite import Base
        # lecture du contenu de la base - champs nom , tel
        db = Base('numtel.pdl')
        if db.exists():
            db.open()
        for rec in db(nom=msg_nom.get()):
            print(msg_tel.get((rec['tel'])))
     
     
    # #
    def quitter():
        fen.destroy()
    def resultat():
        entree_nom.bind("<Return>", pydblite)
        return msg_tel.get()
     
    msg_nom = StringVar()
    msg_tel = StringVar()
     
    # prog
    fen = Tk()
     
    # frame
    frame_nom = LabelFrame(fen, text = "NOM", labelanchor= N)
    frame_nom.pack(padx =10, pady = 10, side=LEFT)
     
    frame_tel= LabelFrame(fen, text = "TEL", labelanchor= N)
    frame_tel.pack(padx =10, pady = 10, side=LEFT)
    #
    #  entree nom
    entree_nom=Entry(frame_nom, textvariable = msg_nom, bd=5)
    entree_nom.bind("<Return>", pydblite)
    entree_nom.pack()
    #
    # label reponse tel apres action sur la touche ENTER
    label_tel=Label(frame_tel, textvariable = msg_tel)
    label_tel.pack()
    #
    # bouton quit
    bouton_quit=Button(fen, text='Quit', command=quitter).pack(side=BOTTOM)
     
    # ------------------------------------------------------------------------------
    fen.minsize(200,200)
    fen.mainloop()

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 695
    Par défaut
    Salut,

    Citation Envoyé par pascaljqt Voir le message
    J'obtiens bien une reponse correcte en rajoutant ce petit bout de code, lors du test, mais rien pas de reponse dans le label 'tel'
    Si vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        for rec in db(nom=msg_nom.get()):
            print(msg_tel.get((rec['tel'])))
    vous devriez avoir un message d'erreur car msg_tel.get ne s'attend pas du tout à ce que vous lui passiez un paramètre. De plus, si vous voulez recopier dans la StringVar msg_tel, c'est plutôt un .set qu'il faut utiliser et non un .get.
    Cela étant, s'il n'y a pas de message d'erreur, c'est sans doute parce qu'il n'y a pas de "rec" correspondant.
    Peut être qu'un print de ce que retourne msg_nom.get() serait utile pour voir ce qu'il se passe.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 17
    Par défaut
    Bonjour
    Voici le code que j'ai écrit avec une vue du test dans Pyscrpter et une vue de ma fenetre sans le resultat dans le label 'tel".
    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
    # modules
    from tkinter import *
     
    # methodes
    def pydblite(event):
        from pydblite.pydblite import Base
        # lecture du contenu de la base - champs nom , tel
        db = Base('numtel.pdl')
        if db.exists():
            db.open()
        for rec in db(nom=entree_nom.get()):
            print(rec['tel'])
            msg_tel.set((rec['tel']))
     
     
    # #
    def quitter():
        fen.destroy()
    def resultat():
        entree_nom.bind("<Return>", pydblite)
        return msg_tel.get()
     
    msg_nom = StringVar()
    msg_tel = StringVar()
     
    # prog
    fen = Tk()
     
    # frame
    frame_nom = LabelFrame(fen, text = "NOM", labelanchor= N)
    frame_nom.pack(padx =10, pady = 10, side=LEFT)
     
    frame_tel= LabelFrame(fen, text = "TEL", labelanchor= N)
    frame_tel.pack(padx =10, pady = 10, side=LEFT)
    #
    #  entree nom
    entree_nom=Entry(frame_nom, textvariable = msg_nom, bd=5)
    entree_nom.bind("<Return>", pydblite)
    entree_nom.pack()
    #
    # label reponse tel apres action sur la touche ENTER
    label_tel=Label(frame_tel, textvariable = msg_tel)
    label_tel.pack()
    #
    # bouton quit
    bouton_quit=Button(fen, text='Quit', command=quitter).pack(side=BOTTOM)
     
    # ------------------------------------------------------------------------------
    fen.minsize(200,200)
    fen.mainloop()
    resultat du test dans Pyscripter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    *** Console de processus distant Réinitialisée *** 
    >>> 
    >>> 07 77 77
    07 77 77
    Ma fenetre contient bien dans "entry" nom Dupond et rien dans le labal.???
    J'ai du mal a comprendre ce qu'il manque
    Merci de votre aide
    Bon WE

  13. #13
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 695
    Par défaut
    Salut,

    Tout d'abord le code que vous avez posté plante bien avant afficher quoi que ce soit. La raison en est qu'on ne peut pas 'instancier' de variables Tk avant d'avoir initialisé l'interpréteur via "fen = Tk()".

    Pour le reste, pas facile de reproduire ce que vous racontez sans avoir accès à la base...
    Mais, on peut virer la base en réduisant le callback "pydblite" à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # methodes
    def pydblite(event):
            msg_tel.set((77777))
    Et cette simplification fonctionne très bien.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  14. #14
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 17
    Par défaut base pydblite
    Bonjour
    J'ai bien avancé dans le script, il y a du resultat.
    En tapant milou dans "l'entry" j'obtient la bonne reponse de ma base pydblite = 88, dans le label. ( resultat des prints=
    >>>
    verif_1 88
    verif_2 milou
    verif_3 88
    >>>
    j'ai rajouté un bouton "clear" pour effacer l'entry et le label. le probleme et que j'arrive à reseter "l'entry" avec "msg_tel.delete(0.END) ou "label_tel.delete(0.END)". j'obtient ce message = msg.tel.delete(0,END)
    NameError: name 'msg' is not defined, meme genre avec label_tel
    voici mon code
    merci de votre aide
    et bonnes fetes de fin d'année
    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
    # modules ----------------------------------------------------------------------
    from tkinter import *
     
    # methodes ---------------------------------------------------------------------
    def pydblite(event):
        from pydblite.pydblite import Base
        # lecture du contenu de la base - champs nom , tel
        db = Base('numtel.pdl')
        if db.exists():
            db.open()
        for rec in db(nom=entree_nom.get()):
            msg_tel.set((rec['tel']))
            print("verif_1",rec['tel'])
            print("verif_2",entree_nom.get())
            print("verif_3",msg_tel.get())
    # #
    def quitter():
        fen.destroy()
    def resultat():
        entree_nom.bind("<Return>", pydblite)
    def nettoyage():
        entree_nom.delete(0,END)
        msg.tel.delete(0,END)
     
     
    # prog -------------------------------------------------------------------------
    fen = Tk()
     
    # frame
    frame_nom = LabelFrame(fen, text = "NOM", labelanchor= N)
    frame_nom.pack(padx =10, pady = 10, side=LEFT)
     
    frame_tel= LabelFrame(fen, text = "TEL", labelanchor= N)
    frame_tel.pack(padx =10, pady = 10, side=LEFT)
    #
    #  entree nom
    msg_nom = StringVar()
    entree_nom=Entry(frame_nom, textvariable = msg_nom, bd=5)
    msg_nom.set("")
    entree_nom.bind("<Return>", pydblite)
    entree_nom.pack()
    #
    # label reponse tel apres action sur la touche ENTER
    msg_tel= StringVar()
    label_tel=Label(frame_tel,textvariable = msg_tel)
    label_tel.pack()
    msg_tel.set("")
    #
    # bouton quit
    bouton_quit=Button(fen, text='Quit', command=quitter).pack(side=BOTTOM)
    bouton_clear=Button(fen,text="clear",command=nettoyage).pack()
    # ------------------------------------------------------------------------------
    fen.minsize(220,220)
    fen.mainloop()

  15. #15
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 695
    Par défaut
    Citation Envoyé par pascaljqt Voir le message
    j'ai rajouté un bouton "clear" pour effacer l'entry et le label. le probleme et que j'arrive à reseter "l'entry" avec "msg_tel.delete(0.END) ou "label_tel.delete(0.END)". j'obtient ce message = msg.tel.delete(0,END)
    NameError: name 'msg' is not defined, meme genre avec label_tel
    Si un coup vous écrivez "msg_tel" et ailleurs "msg.tel" n'attendez pas qu'un ordinateur puisse imaginer que vous parliez de la même chose.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  16. #16
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 17
    Par défaut
    Bonjour
    Le script est terminé et fonctionne, " un exemple pour comprendre"
    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
    # modules ----------------------------------------------------------------------
    from tkinter import *
    from pydblite.pydblite import Base
    # lecture du contenu de la base - champs nom , tel
    db = Base('numtel.pdl')
    if db.exists():
        db.open()
     
    # methodes ---------------------------------------------------------------------
     
    def recherche(event):
        try:
            for rec in db(nom=entree_nom.get()):
                msg_tel.set((rec['tel']))
        except:
            msg_nom.set('')
     
        else:
            print("verif_1",rec['tel'])
            print("verif_2",entree_nom.get())
            print("verif_3",msg_tel.get())
    # #
    def quitter():
        fen.destroy()
    def resultat(event):
        entree_nom.bind("<Return>", recherche)
    def nettoyage():
        msg_nom.set('')
        msg_tel.set('')
     
    # prog -------------------------------------------------------------------------
    fen = Tk()
     
    # frame
    frame_nom = LabelFrame(fen, text = "NOM", labelanchor= N)
    frame_nom.pack(padx =10, pady = 10, side=LEFT)
     
    frame_tel= LabelFrame(fen, text = "TEL", labelanchor= N)
    frame_tel.pack(padx =10, pady = 10, side=LEFT)
    #
    #  entree nom
    msg_nom = StringVar()
    entree_nom=Entry(frame_nom, textvariable= msg_nom, bd=5)
    msg_nom.set("")
    entree_nom.bind("<Return>", recherche)
    entree_nom.pack()
    #
    # label reponse tel apres action sur la touche ENTER
    msg_tel= StringVar()
    label_tel=Label(frame_tel,textvariable = msg_tel)
    label_tel.pack()
    msg_tel.set("")
    #
    # bouton quit
    bouton_quit=Button(fen, text='Quit', command=quitter).pack(side=BOTTOM)
    bouton_clear=Button(fen,text="clear",command=nettoyage).pack()
    # ------------------------------------------------------------------------------
    fen.minsize(220,220)
    fen.mainloop()

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

Discussions similaires

  1. [MySQL] Je souhaite avoir le résultat d'une requête visible pour tous sur une page de Forum
    Par paradogz dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 25/01/2008, 11h18
  2. Parser une requête SQL pour MySQL
    Par gassla dans le forum SGBD
    Réponses: 3
    Dernier message: 02/08/2006, 15h36
  3. Réponses: 1
    Dernier message: 21/03/2006, 14h29
  4. Creer une requéte access pour choisir des textes word
    Par mariekero dans le forum Access
    Réponses: 1
    Dernier message: 16/01/2006, 10h25

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