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 :

problème insertion image


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut problème insertion image
    Bonjour à tous. En fait voilà je suis débutant avec python et je dois créer un programme.
    Mon idée est de réaliser une base de données d'acides aminées, donc en gros quand je tape la lettre correspondante, une image apparait dans un canevas avec quelques informations. Mais je ne vois pas du tout comment faire
    Ni quelle commande mettre à ma ligne 15 et si je dois créer une liste de toutes mes images.
    Voici le début de mon programme, il s'agit d'un brouillon bien sur:



    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
    # importation Tkinter
    from Tkinter import *
     
    # définition lettre (un caractère)
    def lettre():
        # création d'une fenetre
        fen1=Tk()
        fen1.title("introduisez la lettre")
        # création d'une zone d'écriture
        chaine1 = Label (fen1, text = "introduisez")
        chaine1.grid(row =0)
        entr1= Entry(fen1)
        entr1.grid(row =0, column =1)
        # boutton continuer
        bou1=Button(fen1,text= 'Continuer', command= base) 
        bou1.grid(row=2,column=1)
        # boutton quitter
        bou2=Button(fen1, text="quitter", command=fen1.destroy)
        bou2.grid(row=2,column=2)
     
    # cration fenetre principale + quatres bouttons
    fen = Tk()
    fen.title("base de données acide aminés")
    tex=Label(fen, text="Cliquer sur votre choix", fg="red")
    tex.pack(padx=15, pady=15)
    bou1 = Button(fen, text=" 1 lettre", padx=15, pady=20, fg="purple", command=lettre)
    bou1.pack(side=LEFT, padx=15, pady=15)
    bou2 = Button(fen, text='3 lettres', padx=15, pady=20, fg="blue")
    bou2.pack(side=LEFT, padx=15, pady=15)
    bou3 = Button(fen, text="nom complet", padx=15, pady=20, fg="cyan")
    bou3.pack(side=LEFT, padx=15, pady=15)
    bou4=Button(fen, text="Quitter", padx=15, pady=20, fg="maroon", command= fen.destroy)
    bou4.pack(side=LEFT, padx=15, pady=15)
    Je vous remercie d'avance

  2. #2
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonsoir,

    Citation Envoyé par sylva46 Voir le message
    Mon idée est de réaliser une base de données d'acides aminées, donc en gros quand je tape la lettre correspondante, une image apparait dans un canevas avec quelques informations.
    J'ai regarder votre code (et votre demande) et je me demande pourquoi vous voulez ouvrir une autre fenêtre. Pourquoi ne pas faire tout cela dans fen ?

    Pour ce qui est des images ben...
    Citation Envoyé par sylva46 Voir le message
    Mon idée est de réaliser une base de données d'acides aminées
    . Ou un dico, voir une liste de tuple. Cela donne quoi comme données ? Est il possible d'avoir un exemple ?

    Dans un premier temps du code pour vous :
    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
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    # importation Tkinter
    from Tkinter import *
     
    # définition lettre (un caractère)
    def lettre():
        # Une seule instance Tk() svp.
        # Toplevel permet de créer une fenètre fille.
        fen1 = Toplevel(fen)
        fen1.title("introduisez la lettre")
        Label(fen1, text="introduisez").grid(row=0, column=0, padx=5, pady=5)
        # Ici j'ai besoin du nom entr1 pour sa valeur sous Python donc :
        entr1= Entry(fen1)
        entr1.grid(row=0, column=1, padx=5, pady=5)
        # Donner le focus à l'Entry, c'est plus propre non ?
        entr1.focus_set()
        Button(fen1, text='Continuer').grid(row=2, column=1, pady=5, padx=5)
        # Ici pas de problème : j'utilise destroy().
        Button(fen1, text="quitter", command=fen1.destroy).grid(row=2,column=2, pady=5, padx=5)
     
    fen = Tk()
    fen.title("base de données acide aminés")
    # Pour ce qui est des Widgets (Label, Button, etc...) si vous utilisez
    # tex = Label(fen, text="Cliquer sur votre choix", fg="red")
    # c'est que vous avez besoin sous Python d'avoir le nom 'tex' pour
    # l'utiliser par la suite.
    # Dans le cadre d'un titre c'est inutile.
    Label(fen, text="Cliquer sur votre choix", fg="red").pack(padx=15, pady=15)
    # Pour le Widget Button c'est la (presque) même chose. Pour vous
    # l'important c'est la méthode 'command' et elle est incluse dans le
    # Widget créé (comprendre command=lettre).
    Button(fen, text="1 lettre", fg="purple", command=lettre).pack(side=LEFT, padx=15, pady=15)
    # padx et pady c'est pour le gestionnaire de géometrie (ici pack)
    Button(fen, text="3 lettres", fg="blue").pack(side=LEFT, padx=15, pady=15)
    Button(fen, text="nom complet", fg="cyan").pack(side=LEFT, padx=15, pady=15)
    # Merci d'utiliser fen.quit ('nom de l'instance'.quit) pour l'instance Tk().
    # .quit() arrête l'interpréteur tcl .destroy() detruit l'objet.
    # Donc :
    # .quit() arrête l'interpréteur et donc son gestionnaire d'événements (.mainloop())
    # Comme il n'y a rien après c'est fini.
    # .destroy() ne fait que détruire l'instance.
    Button(fen, text="Quitter", fg="maroon", command=fen.quit).pack(side=LEFT, padx=15, pady=15)
    fen.mainloop()
    Ensuite: Un exemple sur ce genre d'idée.

    Après c'est dans votre choix de recherche soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Button(fen, text="1 lettre",)
    Button(fen, text="3 lettres"
    Button(fen, text="nom complet")
    Souhaitez vous faire comme cela ou 'plus progressif' (Voir la validation d'une Entry dans mon lien) ?

    En fait que voulez vous comme interface. Tout est possible et il vas vous falloir définir tout cela.

    @+

  3. #3
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Citation Envoyé par sylva46 Voir le message
    une image apparait dans un canevas
    Pourquoi un Canvas ? Un Label est largement suffisant dans ce cas.
    Même cas pour les quelques informations.
    Il vous suffit donc de mettre deux Label dans fen1 et de les remplir avec les informations.
    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
    def lettre():
        d = {'a': ('L-Alanine', 'L-Alanine.png'), 'g': ('Glycine', 'Glycine.png')
        def affiche():
            aa = entr1.get()
            if aa in d:
                img = PhotoImage(file = d[aa][1])
                desc =  d[aa][0]    
                labimg.configure(image=img)
                labimg.image = img
                labdesc.configure(text=desc)
     
        # Une seule instance Tk() svp.
        # Toplevel permet de créer une fenètre fille.
        fen1 = Toplevel(fen)
        fen1.title("introduisez la lettre")
        Label(fen1, text="introduisez").grid(row=0, column=0, padx=5, pady=5)
        # Ici j'ai besoin du nom entr1 pour sa valeur sous Python donc :
        entr1= Entry(fen1)
        entr1.grid(row=0, column=1, padx=5, pady=5)
        # Donner le focus à l'Entry, c'est plus propre non ?
        entr1.focus_set()
        labimg = Label(fen1, text='Image')
        labimg.grid(row=1, column=0, columnspan=2)
        labdesc = Label(fen1, text='Description')
        labdesc.grid(row=1, column=2)
        Button(fen1, text='Continuer', command=affiche).grid(row=2, column=1, pady=5, padx=5)
        # Ici pas de problème : j'utilise destroy().
        Button(fen1, text="quitter", command=fen1.destroy).grid(row=2,column=2, pady=5, padx=5)
    Ceci dit il me semble qu'un seul dico serait bien.
    Par 1 lettre/3lettres vous attendez quoi comme entrée (moi et las acides...)
    car pour moi c'est difficile sur une lettre par exemple avec L-Alanine, L-Arginine, L-Asparagine, L-Aspartate etc...

    @+

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Tout d'abord merci d'avoir pris le temps de me répondre
    Etant débutant j'avoue ne pas avoir tout compris.
    En fait pour chaque acide, il y a 3 code :
    ex : alanine=A=Ala
    Donc j aimerai qu'une image au format gif apparaissent lorsque je tape l'un de ces codes. Oui ça peut etre dans la meme fenetre. Avec si possible qq info écrite.
    Votre premier code posté est parfait. C'est le 2ème que je comprend un peu moins nottament pour l'affichage :s
    Mais j ai peur aussi que cela devienne difficile pour définir chaque image.
    Donc voilà je ne sais pas ce que vous en pensez.
    Encore merci en tout cas

  5. #5
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Je pense que je vais vous perdre en route mais je reviendrais pour de plus amples explications plus tard. Voici donc un morceau de code dans un premier temps.

    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
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    from Tkinter import *
     
    # A vous de remplir le dico:
    dico = {('a', 'Ala', 'Alamine'): ('alamine.gif', "description\n de l'acide")}
     
    def recherche(col):
        def affiche():
            aa = entr1.get()
            result = [dico[cle] for cle in dico if cle[col] == aa]
            if result:
                img = result[0][0]
                desc = result[0][1]
                photo = PhotoImage(file=img)  
                labimg.configure(image=photo)
                labimg.image = photo
                labdesc.configure(text=desc)
     
        fen1 = Toplevel(fen)
        fen1.title("introduisez la lettre")
        Label(fen1, text="introduisez").grid(row=0, column=0, padx=5, pady=5)
        entr1= Entry(fen1)
        entr1.grid(row=0, column=1, padx=5, pady=5)
        entr1.focus_set()
        labimg = Label(fen1, text='Image')
        labimg.grid(row=1, column=0, columnspan=2)
        labdesc = Label(fen1, text='Description')
        labdesc.grid(row=1, column=2)
        Button(fen1, text='Continuer', command=affiche).grid(row=2, column=1, pady=5, padx=5)
        Button(fen1, text="quitter", command=fen1.destroy).grid(row=2,column=2, pady=5, padx=5)
     
    fen = Tk()
    fen.title("base de données acide aminés")
    Label(fen, text="Cliquer sur votre choix", fg="red").pack(padx=15, pady=15)
    Button(fen, text="1 lettre", fg="purple", command=lambda :recherche(0)).pack(side=LEFT, padx=15, pady=15)
    Button(fen, text="3 lettres", fg="blue", command=lambda :recherche(1)).pack(side=LEFT, padx=15, pady=15)
    Button(fen, text="nom complet", fg="cyan", command=lambda :recherche(2)).pack(side=LEFT, padx=15, pady=15)
    Button(fen, text="Quitter", fg="maroon", command=fen.quit).pack(side=LEFT, padx=15, pady=15)
    fen.mainloop()
    Si cela vous conviens on décortique tout cela ce soir.

    @+

    Edit : Rien n'empêche de donner une solution plus simple...

  6. #6
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    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
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    from Tkinter import *
     
    # A vous de remplir le dico:
    dico = {'Alamine': ('alamine.gif', "description\n de l'acide")}
     
    def recherche():
        aa = entr1.get().lower()
        if len(aa) > 2:
            result = [dico[cle] for cle in dico if cle.lower().startswith(aa)]
            if result:
                img = result[0][0]
                desc = result[0][1]
                photo = PhotoImage(file=img)  
                labimg.configure(image=photo)
                labimg.image = photo
                labdesc.configure(text=desc)
     
    fen = Tk()
    fen.title("base de données acide aminés")
    Label(fen, text="introduisez").pack(padx=5, pady=5)
    entr1= Entry(fen)
    entr1.pack(padx=5, pady=5)
    entr1.focus_set()
    conteneur = Frame(fen)
    labimg = Label(conteneur, text='Image')
    labimg.pack(side=LEFT)
    labdesc = Label(conteneur, text='Description')
    labdesc.pack(side=RIGHT)
    conteneur.pack()
    Button(fen, text="Recherche", fg="purple", command=recherche).pack(side=LEFT, padx=15, pady=15)
    Button(fen, text="Quitter", fg="maroon", command=fen.quit).pack(side=LEFT, padx=15, pady=15)
    fen.mainloop()
    Tout simplement...
    Pas le temps de revoir la géométrie.

    @+

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Je suis d'accord le deuxième code est beaucoup plus simple.

    Mais pour la ligne 12 j aurais quand meme voulu me limiter à mes trois code car si je tape alani cela fonctionne aussi.

    De plus j aurais voulu intégrer un boutton effacer, permettant de redemarrer une recherche directement.
    Voici la ligne que je voulais utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Button(fen, text="Effacer", fg="red", command=fen.delete).pack(side=LEFT, padx=15, pady=15)
    Est-ce la bonne méthode?

    Sinon oui qq explications ne me ferai pas de mal
    En tout cas encore merci.

  8. #8
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonsoir,

    Citation Envoyé par sylva46 Voir le message
    Mais pour la ligne 12 j aurais quand meme voulu me limiter à mes trois code car si je tape alani cela fonctionne aussi.
    Je me doute.
    Mais bon j'ai déjà poser la question : 'Arginine', 'Asparagine', 'Aspartate' soit a...
    Citation Envoyé par PauseKawa Voir le message
    car pour moi c'est difficile sur une lettre par exemple avec L-Alanine, L-Arginine, L-Asparagine, L-Aspartate etc...
    Pensez vous rester sur votre position ?
    Dans tous les cas (Sauf le nom complet bien sur) vous avez des réponses multiples possible.

    Citation Envoyé par sylva46 Voir le message
    De plus j aurais voulu intégrer un boutton effacer, permettant de redemarrer une recherche directement.
    Voici la ligne que je voulais utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Button(fen, text="Effacer", fg="red", command=fen.delete).pack(side=LEFT, padx=15, pady=15)
    Est-ce la bonne méthode?
    Non.

    Je pense vous avoir perdu dans tout cela. Reprenez votre code et montrez nous cela.

    @+

  9. #9
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    bonsoir,
    Non le 2ème code est parfait car bcp plus simple. Mais je viens de comprendre qu'elle est le soucis. En fait pour asparagine, le code une lettre est N, pour arginine c'est R,...Il s'agit tjs d'un code différent en fait.

  10. #10
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    En fait j'ai voulu combiner les 2 codes mais l'image n'apparait pas :/


    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
    from Tkinter import *
     
    # A vous de remplir le dico:
    dico = {('a', 'Ala', 'Alanine'): ('Alanine.gif', "description\n de l'acide")}
     
    def recherche():
        def affiche():
            aa = entr1.get()
            result = [dico[cle] for cle in dico if cle() == aa]
            if result:
                img = result[0][0]
                desc = result[0][1]
                photo = PhotoImage(file='Alanine.gif')  
                labimg.configure(image=photo)
                labimg.image = photo
                labdesc.configure(text=desc)
     
    fen = Tk()
    fen.title("base de données acide aminés")
    Label(fen, text="introduisez").pack(padx=5, pady=5)
    entr1= Entry(fen)
    entr1.pack(padx=5, pady=5)
    entr1.focus_set()
    conteneur = Frame(fen)
    labimg = Label(conteneur, text='Image')
    labimg.pack(side=LEFT)
    labdesc = Label(conteneur, text='Description')
    labdesc.pack(side=RIGHT)
    conteneur.pack()
    Button(fen, text="Recherche", fg="purple", command=recherche).pack(side=LEFT, padx=15, pady=15)
    Button(fen, text="Quitter", fg="maroon", command=fen.quit).pack(side=LEFT, padx=15, pady=15)
    fen.mainloop()
    Le boutton effacer est juste pour supprimer l'image et recommencer une recherche.

  11. #11
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonsoir,

    Citation Envoyé par sylva46 Voir le message
    bonsoir,
    Non le 2ème code est parfait car bcp plus simple. Mais je viens de comprendre qu'elle est le soucis. En fait pour asparagine, le code une lettre est N, pour arginine c'est R,...Il s'agit tjs d'un code différent en fait.
    Dans ce cas un dico avec un tuple/liste pour clé me semble bien (Comprendre dico = {('a', 'Ala', 'Alamine'): ('alamine.gif', "description\n de l'acide")} ).
    Bien que cela demande un parcours complet... (for).

    Rien dans votre fonction recherche n'appelle la fonction affiche.

    Reprenez au début votre code sans faire de copier/coller et avec ce que vous avez compris.

    @+

  12. #12
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Je dois à chaque fois redéfinir la partie recherche (ligne 6) pour chacune de mes images alors?

  13. #13
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    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
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    from Tkinter import *
     
    # A vous de remplir le dico:
    dico = {'default': ('default.gif', "Merci de rentrer votre recherche"), ('a', 'ala', 'alanine'): ('Alanine.gif', "Alanine"), ('r', 'arg', 'arginine'): ('Arginine.gif', "Arginine"), ('n', 'asp', 'asparagine'): ('Asparagine.gif', "Asparagine")}
     
    def recherche(col):
        aa = entr1.get().lower()
        result = [dico[cle] for cle in dico if cle[col].lower() == aa]
        if result:
            img = result[0][0]
            desc = result[0][1]
            # Optionnel
            if len(result) > 1:
                desc = desc + "\n(Plusieurs choix. Veuilliez préciser)"
        else:
            img = dico['default'][0]
            desc = dico['default'][1]
        affiche(img, desc)
     
     
    def affiche(img, desc):
        photo = PhotoImage(file=img)  
        labimg.configure(image=photo)
        labimg.image = photo
        labdesc.configure(text=desc)
     
    def Efface():
        entr1.delete(0, END)
        img = dico['default'][0]
        desc = dico['default'][1]
        affiche(img, desc)
     
    fen = Tk()
    fen.title("base de données acide aminés")
    Label(fen, text="Votre recherche :").pack(padx=5, pady=5)
    entr1= Entry(fen)
    entr1.pack(padx=5, pady=5)
    entr1.focus_set()
    conteneur = Frame(fen)
    labimg = Label(conteneur)
    labimg.pack(side=LEFT, ipadx=10, ipady=10, padx=5, pady=5)
    labdesc = Label(conteneur, justify=LEFT)
    labdesc.pack(side=LEFT, ipadx=10, ipady=10, padx=5, pady=5)
    conteneur.pack(fill=BOTH, expand=1, padx=10, pady=5)
    Button(fen, text="1 lettre", fg="purple", command=lambda :recherche(0)).pack(side=LEFT, padx=15, pady=15)
    Button(fen, text="3 lettres", fg="blue", command=lambda :recherche(1)).pack(side=LEFT, padx=15, pady=15)
    Button(fen, text="nom complet", fg="cyan", command=lambda :recherche(2)).pack(side=LEFT, padx=15, pady=15)
    Button(fen, text="Effacer", fg="red", command=Efface).pack(side=LEFT, padx=15, pady=15)
    Button(fen, text="Quitter", fg="maroon", command=fen.quit).pack(side=LEFT, padx=15, pady=15)
    Efface()
    fen.mainloop()
    @+

  14. #14
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Ok c'était aussi simple que ça. J était vmnt mal parti
    Merci en tout cas. J'aurais qd mm voulu avoir qq explications supplémentaire sur les lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def recherche(col):
        aa = entr1.get().lower()
        result = [dico[cle] for cle in dico if cle[col].lower() == aa]
    j ai du mal à voir l'utilité du col ainsi que du .lower
    Et enfin une petite explication sur la fct lambda et justify ligne 46.
    Promis ensuite je vous laisse tranquille

  15. #15
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Mal parti ? Pas vraiment :
    Votre code de départ est bon si ce n'est qu'il utilise deux instance Tk() (fen et fen1).
    Le reste c'est du bonus.

    justify=LEFT pour labdesc ? C'est centré par défaut dans un Widget Label.

    string.lower() > minuscule.

    lambda, cher lambda... Si vous écrivez command=recherche(0) recherche(0) est exécuté à la création du Widget (Comprendre recherche(0) ).
    Par contre avec command=lambda :recherche(0) la fonction 'lambda' est exécutée lors de l'event.

    col ? c'est x, y ou z si vous préférez. C'est un argument.

    Voici ce que cela donne sans 'col' ni lambda.
    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
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    from Tkinter import *
     
    # A vous de remplir le dico:
    dico = {'default': ('default.gif', "Merci de rentrer votre recherche"), ('a', 'ala', 'alanine'): ('Alanine.gif', "Alanine"), ('r', 'arg', 'arginine'): ('Arginine.gif', "Arginine"), ('n', 'asp', 'asparagine'): ('Asparagine.gif', "Asparagine")}
     
    def recherche1():
        aa = entr1.get().lower()
        result = [dico[cle] for cle in dico if cle[0].lower() == aa]
        if result:
            img = result[0][0]
            desc = result[0][1]
            # Optionnel
            if len(result) > 1:
                desc = desc + "\n(Plusieurs choix. Veuilliez préciser)"
        else:
            img = dico['default'][0]
            desc = dico['default'][1]
        affiche(img, desc)
     
    def recherche3():
        aa = entr1.get().lower()
        result = [dico[cle] for cle in dico if cle[1].lower() == aa]
        if result:
            img = result[0][0]
            desc = result[0][1]
            # Optionnel
            if len(result) > 1:
                desc = desc + "\n(Plusieurs choix. Veuilliez préciser)"
        else:
            img = dico['default'][0]
            desc = dico['default'][1]
        affiche(img, desc)
     
     
    def recherchecomplet():
        aa = entr1.get().lower()
        result = [dico[cle] for cle in dico if cle[2].lower() == aa]
        if result:
            img = result[0][0]
            desc = result[0][1]
            # Optionnel
            if len(result) > 1:
                desc = desc + "\n(Plusieurs choix. Veuilliez préciser)"
        else:
            img = dico['default'][0]
            desc = dico['default'][1]
        affiche(img, desc)
     
    def affiche(img, desc):
        photo = PhotoImage(file=img)  
        labimg.configure(image=photo)
        labimg.image = photo
        labdesc.configure(text=desc)
     
    def Efface():
        entr1.delete(0, END)
        img = dico['default'][0]
        desc = dico['default'][1]
        affiche(img, desc)
     
    def lettre():
        recherche1()
     
    def trois():
        recherche3()
     
    def complet():
        recherchecomplet()
     
    fen = Tk()
    fen.title("base de données acide aminés")
    Label(fen, text="Votre recherche :").pack(padx=5, pady=5)
    entr1= Entry(fen)
    entr1.pack(padx=5, pady=5)
    entr1.focus_set()
    conteneur = Frame(fen)
    labimg = Label(conteneur)
    labimg.pack(side=LEFT, ipadx=10, ipady=10, padx=5, pady=5)
    labdesc = Label(conteneur, justify=LEFT)
    labdesc.pack(side=LEFT, ipadx=10, ipady=10, padx=5, pady=5)
    conteneur.pack(fill=BOTH, expand=1, padx=10, pady=5)
    Button(fen, text="1 lettre", fg="purple", command=lettre).pack(side=LEFT, padx=15, pady=15)
    Button(fen, text="3 lettres", fg="blue", command=trois).pack(side=LEFT, padx=15, pady=15)
    Button(fen, text="nom complet", fg="cyan", command=complet).pack(side=LEFT, padx=15, pady=15)
    Button(fen, text="Effacer", fg="red", command=Efface).pack(side=LEFT, padx=15, pady=15)
    Button(fen, text="Quitter", fg="maroon", command=fen.quit).pack(side=LEFT, padx=15, pady=15)
    Efface()
    fen.mainloop()
    Ceci dit je ne suis pas fier du code que je vous propose.
    Le fait d'utiliser une liste comme clé d'un dictionnaire implique le parcours de celui ci (result = [dico[cle] for cle in dico if cle[2].lower() == aa]).
    Cela évite certes un dico du style {'a': ('Alanine.gif', "Alanine"), 'ala': ('Alanine.gif', "Alanine"), 'alanine': ('Alanine.gif', "Alanine")} mais ce n'est pas 'propre'.

    @+

  16. #16
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Un tout grand merci en tout cas pour votre aide et vos explications
    C'est gentil d'avoir passé du temps sur mon problème

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

Discussions similaires

  1. problème Insertion Image
    Par benza dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 2
    Dernier message: 05/05/2010, 01h37
  2. [XL-2003] Problème insertion image dans mail par vba
    Par dawood dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/01/2010, 15h23
  3. problème insertion image en .ps
    Par nunuss35 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 6
    Dernier message: 13/12/2008, 11h26
  4. Problème insertion image
    Par garpa dans le forum Tkinter
    Réponses: 6
    Dernier message: 05/12/2008, 11h58
  5. [javascript] problème insertion image
    Par Pwill dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 18/05/2005, 16h12

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