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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du 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
    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
    Membre Expert 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
    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
    Membre Expert 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
    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
    Membre du 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
    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
    Membre Expert 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
    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
    Membre Expert 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
    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
    Membre du 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
    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.

+ 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