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 :

insertion d'une image


Sujet :

Tkinter Python

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    étudiante
    Inscrit en
    Mai 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante

    Informations forums :
    Inscription : Mai 2011
    Messages : 41
    Points : 26
    Points
    26
    Par défaut insertion d'une image
    Bonjour,

    je suis débutante en Python, et je veux faire une interface graphique qui comprend deux boutons('quitter' et 'démarrer') et un label ('butée sphérique')
    et entre ces 2 boutons et le label je veux insérer une photo de la butée sphérique.
    cette interface graphique représente la page de démarrage du mon programme.
    pour les boutons et le label j'arrive à le faire sous python mais à propos l'insertion du photo j'ai pas une idée claire comment le faire.

    merci d'avance
    Cordialement

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Bonjour,

    Tu ne nous dis pas quel framework graphique utilises-tu.

    Si tu débutes, on peut supposer que tu utilises TKinter, tu as vu qu'il y avait ici un cours dédié aux débutants:

    http://python.developpez.com/cours/TutoSwinnen/

    Si mes souvenirs sont bons, il aborde assez vite le traitement des images dans les interfaces.

    C'est plus tout jeune comme cours, mais pour démarrer avec les interfaces graphiques il est toujours d'actualité.

  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
    Bonsoir,

    Citation Envoyé par VinsS Voir le message
    Tu ne nous dis pas quel framework graphique utilises-tu.
    Ben oui... C'est dans le sous forum Tkinter

    Dans votre cas (simple) vous devez utiliser un Widget Label avec PhotoImage. Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
     
    w = Tk.Tk()
    img = Tk.PhotoImage(file="image.gif")
    l = Tk.Label(w, image=img)
    l.pack()
    w.mainloop()
    Mots clés pour la suite 'Toplevel' (Une seule instance Tk()) et 'photoImage référence'.

    Bonne découverte.

    @+

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    étudiante
    Inscrit en
    Mai 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante

    Informations forums :
    Inscription : Mai 2011
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    Merci pour les réponses.
    Pourrez vous me donner des exemples des scripts ( simples) pour que je puisse le refaire comme entrainement.
    Merci d'avance

  5. #5
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Si tu n'utilise pas le format gif (le seule accepter par Tkinter pourt les photo) il faut passer par le module PIL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    from Tkinter import *
    from PIL import Image, ImageTk
     
    fen=Tk()
    img=[Image.open(chemin/vers/ton/image)] #Il faut conserver l'instance de ton image dans un conteneur
    img_to_tk=[ImageTk.PhotoImage(image=img[0])] #il faut conserver l'instance de ton image dans un conteneur
    lab=Label(fen, image=img_to_tk[0])
    lab.pack()
    fen.mainloop()
    Bon python a toi.

  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
    Bonsoir,



    Pour une fois je ne vais pas corriger la réponse précédente.
    N'en prend pas compte foufaa33.

    @Luke spywoker: C'est quoi ce code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    from Tkinter import *
    Compatibilité Python 2.x/3.x
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    img=[Image.open(chemin/vers/ton/image)] #Il faut conserver l'instance de ton image dans un conteneur
    img_to_tk=[ImageTk.PhotoImage(image=img[0])] #il faut conserver l'instance de ton image dans un conteneur
    lab=Label(fen, image=img_to_tk[0])
    ???!!!! Ok pour la référence mais la je doute de votre compréhension du fait de garder la référence.
    A revoir il me semble.
    @+

  7. #7
    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 foufaa33 Voir le message
    'butée sphérique'
    C'est à dire ?
    Voici pour ce qui est de la transparence ('butée sphérique' ?) des gif sous Tkinter
    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
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
     
    w = Tk.Tk()
    img = Tk.PhotoImage(file="image.gif")
    c = Tk.Canvas(w, bg ='black')
    c.pack()
    c.create_image(50, 50, image=img)
    w.mainloop()
    @+

  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
    Note:
    Citation Envoyé par PauseKawa Voir le message
    Voici pour ce qui est de la transparence
    Je parle de la transparence par rapport à la fenêtre (et ici pour le Canvas), pas de la transparence de celle ci (roottk.wm_attributes('alpha', 0) sous Windows) bien sur.

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    étudiante
    Inscrit en
    Mai 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante

    Informations forums :
    Inscription : Mai 2011
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    merci pour les réponses.
    ma question est maintenant comment insérer une photo.jpg

    Cordialement

  10. #10
    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,

    Pour le format jpg c'est PIL
    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
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
    from PIL import Image, ImageTk
     
    w = Tk.Tk()
    #photo = Image.open("image.jpg") # Ouverture de l'image avec PIL
    #img = ImageTk.PhotoImage(photo) # Transformation en image compatible Tkinter
    img = ImageTk.PhotoImage(Image.open("image.jpg"))
    l = Tk.Label(w, image=img)
    l.image = img # < Garder la référence
    l.pack()
    w.mainloop()
    Par contre cela n'existe pas encore pour Python 3.
    Voici deux ports non officiel pour Python 3
    pil-py3k
    pil

    @+

  11. #11
    Nouveau membre du Club
    Femme Profil pro
    étudiante
    Inscrit en
    Mai 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante

    Informations forums :
    Inscription : Mai 2011
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    j'ai essayé d'insérer le code d'insertion d'une image.gif dans le programme principale ; mais ça marche pas.
    le code est le suivant:

    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
    # Nom du programme : Sphérical bearings
    # compatibilité :
    import os
    # Interface graphique :
    from tkinter import*
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
     
    #-----------------------------définition des fonctions-------------------------
     
    # Fontion d'introduction du matériau :   
    def matériau():
        fen1=Toplevel(fen)
        fen1.title("Matériaux")
        Label(fen1, text="#--------Matériaux--------#", fg="blue").grid(row=0, column=1, pady=5, padx=5)
        Label(fen1, text="introduisez le matériaux", fg="red").grid(row=1, column=0, pady=5, padx=5)
        entr1=Entry(fen1)
        entr1.grid(row=1, column=3, pady=5, padx=5)
        entr1.focus_set()
        Label(fen1, text="le module d'Young", fg="red").grid(row=2, column=0, pady=5, padx=5)
        entr2=Entry(fen1)
        entr2.grid(row=2, column=3, pady=5, padx=5)
        entr2.focus_set()
        Label(fen1, text="le coefficient du poisson", fg="red").grid(row=3, column=0, pady=5, padx=5)
        entr3=Entry(fen1)
        entr3.grid(row=3, column=3, pady=5, padx=5)
        entr3.focus_set()
        Label(fen1, text="Rm", fg="red").grid(row=4, column=0, pady=5, padx=5)
        entr4=Entry(fen1)
        entr4.grid(row=4, column=3, pady=5, padx=5)
        entr4.focus_set()
        Label(fen1, text="Re", fg="red").grid(row=5, column=0, pady=5, padx=5)
        entr5=Entry(fen1)
        entr5.grid(row=5, column=3, pady=5, padx=5)
        entr5.focus_set()
        Button(fen1, text='Précédant', command=fen.deiconify).grid(row=6, column=0, pady=5, padx=5)
        Button(fen1, text='Suivant').grid(row=6, column=3, pady=5, padx=5)
     
    #-------------------------------Corps du programme------------------------------
     
    fen=Tk.Tk()
    fen.title("Spherical bearing")
    Label(fen, text="#--------Spherical bearing--------#", fg="blue").grid(row=0, column=1, pady=5, padx=5)
    photo= Tk.PhotoImage(file="cartoon_037.gif")
    l = Tk.Label(fen, image=photo)
    l.pack()
    Button(fen, text="Quit", fg="purple",command=fen.destroy).grid(row=2, column=0, pady=5, padx=5)
    Button(fen, text="Start", fg="purple",command=matériau).grid(row=2, column=2, pady=5, padx=5)
    fen.mainloop()

  12. #12
    Nouveau membre du Club
    Femme Profil pro
    étudiante
    Inscrit en
    Mai 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante

    Informations forums :
    Inscription : Mai 2011
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Bonjour;
    j'ai essayé d'insérer le code d'insertion d'une image.gif dans le programme principale ; mais ça marche pas.
    le code est le suivant:
    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
     
    # Nom du programme : Sphérical bearings
    # compatibilité :
    import os
    # Interface graphique :
    from tkinter import*
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
     
    #-----------------------------définition des fonctions-------------------------
     
    # Fontion d'introduction du matériau :   
    def matériau():
        fen1=Toplevel(fen)
        fen1.title("Matériaux")
        Label(fen1, text="#--------Matériaux--------#", fg="blue").grid(row=0, column=1, pady=5, padx=5)
        Label(fen1, text="introduisez le matériaux", fg="red").grid(row=1, column=0, pady=5, padx=5)
        entr1=Entry(fen1)
        entr1.grid(row=1, column=3, pady=5, padx=5)
        entr1.focus_set()
        Label(fen1, text="le module d'Young", fg="red").grid(row=2, column=0, pady=5, padx=5)
        entr2=Entry(fen1)
        entr2.grid(row=2, column=3, pady=5, padx=5)
        entr2.focus_set()
        Label(fen1, text="le coefficient du poisson", fg="red").grid(row=3, column=0, pady=5, padx=5)
        entr3=Entry(fen1)
        entr3.grid(row=3, column=3, pady=5, padx=5)
        entr3.focus_set()
        Label(fen1, text="Rm", fg="red").grid(row=4, column=0, pady=5, padx=5)
        entr4=Entry(fen1)
        entr4.grid(row=4, column=3, pady=5, padx=5)
        entr4.focus_set()
        Label(fen1, text="Re", fg="red").grid(row=5, column=0, pady=5, padx=5)
        entr5=Entry(fen1)
        entr5.grid(row=5, column=3, pady=5, padx=5)
        entr5.focus_set()
        Button(fen1, text='Précédant', command=fen.deiconify).grid(row=6, column=0, pady=5, padx=5)
        Button(fen1, text='Suivant').grid(row=6, column=3, pady=5, padx=5)
     
    #-------------------------------Corps du programme------------------------------
     
    fen=Tk.Tk()
    fen.title("Spherical bearing")
    Label(fen, text="#--------Spherical bearing--------#", fg="blue").grid(row=0, column=1, pady=5, padx=5)
    photo= Tk.PhotoImage(file="cartoon_037.gif")
    l = Tk.Label(fen, image=photo)
    l.pack()
    Button(fen, text="Quit", fg="purple",command=fen.destroy).grid(row=2, column=0, pady=5, padx=5)
    Button(fen, text="Start", fg="purple",command=matériau).grid(row=2, column=2, pady=5, padx=5)
    fen.mainloop()

  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
    Bonjour,

    A revoir en effet

    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
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    # Nom du programme : Sphérical bearings
    # compatibilité :
    # import os
    # Interface graphique :
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
     
    def materiau():
        # A remplir 'Tk.Wiget'
        pass
    #-------------------------------Corps du programme------------------------------
     
    fen = Tk.Tk()
    fen.title("Spherical bearing")
    Tk.Label(fen, text="#--------Spherical bearing--------#", fg="blue").grid(row=0, column=0, columnspan=2, pady=5, padx=5)
    photo = Tk.PhotoImage(file="image.gif")
    l = Tk.Label(fen, image=photo)
    l.grid(row=1, column=0, columnspan=2, pady=5, padx=5) # < Et non pack
    l.image = photo
    Tk.Button(fen, text="Quit", fg="purple", command=fen.quit).grid(row=2, column=0, pady=5, padx=5)
    Tk.Button(fen, text="Start", fg="purple", command=materiau).grid(row=2, column=1, pady=5, padx=5)
    fen.mainloop()
    @+

  14. #14
    Membre à l'essai
    Inscrit en
    Mai 2011
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Alors déjà, soit tu mets

    soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
    Dans le premier cas, tu n'as pas à rajouter tk. devant chaque méthode Tkinter que tu utilises ( à la manière de ton Tk.label(...) par exemple)
    Ensuite, (moi j'utilises from tkinter import *), tu peux aussi créer un canvas pour le contenir,
    utilises ce code si tu veux faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cartoon_image=Canvas(fen, width=482, height=571, bg='white')
    cartoonphoto=PhotoImage(file = 'cartoon_037.gif')
    item = cartoon_image.create_image(241, 286, image=cartoonphoto)
    à la place de 482 met la largeur de ton image en pixel, à la place de 571 sa hauteur.

    Divise les deux par 2 et remplace 241 et 286, ça centrera ton image dans le canvas.


    En espérant t'avoir aidé.

    (ps : on dit coefficient de poisson, pas du )

  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,

    Citation Envoyé par foudezic63 Voir le message
    Alors déjà, soit tu mets

    soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
    Dans le premier cas, tu n'as pas à rajouter tk. devant chaque méthode Tkinter que tu utilises ( à la manière de ton Tk.label(...) par exemple)
    Ensuite, (moi j'utilises from tkinter import *)
    Petit point sur l'import de Tkinter donc:

    Avec from tkinter import * il est difficile de connaître l'origine d'une fonction ou attribut, ce qui est dangereux vu que Tkinter utilise des noms 'bateau'.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> from Tkinter import *
    >>> Button
    <class Tkinter.Button at 0xa58f08c>
    >>> from matplotlib.widgets import *
    >>> Button
    <class matplotlib.widgets.Button at 0xa997adc>
    Vous voyez bien ici que la classe widgets de matplotlib (ce n'est pas le seul, loin de la) contient le nom 'Button' (plus basique comme nom c'est dur) et si vous faites un dir(Button) vous allez voir que ce n'est pas du tout le même objet.
    C'est donc source à erreur, sauf si vous n'utilisez que Tkinter.
    C'est le cas ici mais pourquoi ne pas commencer a prendre les bonnes habitudes ?

    Ensuite Tkinter se nomme tkinter en Python 3 et Tkinter en Python 2.
    Pour être compatible avec les deux on devrais donc faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    try:
        import tkinter
    except:
        import Tkinter
    Ici on essai de charger le module tkinter de Python 3 et s'il y a erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Python 2.6.6 (r266:84292, Mar 25 2011, 19:24:58) 
    [GCC 4.5.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import tkinter
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ImportError: No module named tkinter
    C'est que nous somme en Python 2.x et qu'il se nomme Tkinter.
    Dans ce cas de figure notre Widget Button se nomme Tkinter.Button. Un tantinet trop long tout cela d’où
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
    C'est déjà mieux puisqu'ici notre Widget se nomme Tk.Button.
    Vous pouvez bien sur donner le nom que vous voulez (import tkinter as tutu) mais Tk cela parle plus non ? De plus le T majuscule et visible dans le code et la lisibilité cela compte.
    A noter que ce type d'import vas vous permettre de savoir ce qui est un objet Tk, exemple: label.delete(0, Tk.END). Pas mal pour avancer non ?

    Ensuite, pour ce qui est de l’entête du fichier py, je rajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    Car vous avez tous tendance a utiliser des caractères accentués.
    Du coup le code est utilisable du premier coup.

    Pour en revenir au sujet le Widget Label est quand même plus facile a utiliser que le Canvas. Pour positionner l'image il suffit d'utiliser anchor.

    Ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    l = Tk.Label(fen, image=photo)
    l.pack()
    Button(fen, text="Quit", fg="purple",command=fen.destroy).grid(row=2, column=0, pady=5, padx=5)
    Vous devez utiliser le même gestionnaire de géométrie pour un même niveau de Widget (rien n'interdit d'en utiliser un autre pour fen1 par exemple).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    l.grid(row=1, column=0, columnspan=2, pady=5, padx=5) # < Et non pack
    l.image = photo
    Tk.Button(fen, text="Quit", fg="purple", command=fen.quit).grid(row=2, column=0, pady=5, padx=5)
    @+

  16. #16
    Nouveau membre du Club
    Femme Profil pro
    étudiante
    Inscrit en
    Mai 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante

    Informations forums :
    Inscription : Mai 2011
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    merci beaucoup pour les réponses précises.
    Voici le code final aprés la correction:

    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
     
     
    # Nom du programme : Sphérical bearings
    # compatibilité :
    import os
    # Interface graphique :
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
     
    #-----------------------------définition des fonctions-------------------------
     
    # Fontion d'introduction du matériau :   
    def matériau():
        fen1=Tk.Toplevel(fen)
        fen1.title("Matériaux")
        lab1 = Tk.Label(fen1, text="#--------Matériaux--------#", fg="blue").grid(row=0, column=1, pady=5, padx=5)
        lab2 = Tk.Label(fen1, text="introduisez le matériaux", fg="red").grid(row=1, column=0, pady=5, padx=5)
        entr1= Tk.Entry(fen1)
        entr1.grid(row=1, column=3, pady=5, padx=5)
        entr1.focus_set()
        lab3 = Tk.Label(fen1, text="le module d'Young", fg="red").grid(row=2, column=0, pady=5, padx=5)
        entr2= Tk.Entry(fen1)
        entr2.grid(row=2, column=3, pady=5, padx=5)
        entr2.focus_set()
        lab4 = Tk.Label(fen1, text="le coefficient de poisson", fg="red").grid(row=3, column=0, pady=5, padx=5)
        entr3= Tk.Entry(fen1)
        entr3.grid(row=3, column=3, pady=5, padx=5)
        entr3.focus_set()
        lab5 = Tk.Label(fen1, text="Rm", fg="red").grid(row=4, column=0, pady=5, padx=5)
        entr4= Tk.Entry(fen1)
        entr4.grid(row=4, column=3, pady=5, padx=5)
        entr4.focus_set()
        lab6 = Tk.Label(fen1, text="Re", fg="red").grid(row=5, column=0, pady=5, padx=5)
        entr5= Tk.Entry(fen1)
        entr5.grid(row=5, column=3, pady=5, padx=5)
        entr5.focus_set()
        bout1= Tk.Button(fen1, text='Précédant', command=fen.deiconify).grid(row=6, column=0, pady=5, padx=5)
        bou2 = Tk.Button(fen1, text='Suivant').grid(row=6, column=3, pady=5, padx=5)
     
    #-------------------------------Corps du programme------------------------------
     
    fen=Tk.Tk()
    fen.title("Spherical bearing")
    lab = Tk.Label(fen, text="#--------Spherical bearing--------#", fg="blue").grid(row=0, column=1, pady=5, padx=5)
    photo= Tk.PhotoImage(file="cartoon_037.gif")
    l = Tk.Label(fen, image=photo)
    l.grid(row=1, column=1)
    b = Tk.Button(fen, text="Quit", fg="purple",command=fen.destroy).grid(row=2, column=0, pady=5, padx=5)
    c = Tk.Button(fen, text="Start", fg="purple",command=matériau).grid(row=2, column=2, pady=5, padx=5)
    fen.mainloop()
    Mais j'ai une petite confusion: quand j'utilise pack() ou grid() ?
    De même quelle est l'influence de "columnspan" et "l.image= photo"? ; car je ne l'ai pas utilisés dans mon script et ça marche.

    Merci d'avance

  17. #17
    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,

    C'est au choix. Vous en avez une description dans la faq.
    Perso je dirais que pack et utilisable pour les interfaces simples, grid pour celles plus structurées (pour le même résultat avec pack on dois utiliser un 'conteneur' (Widget Frame)), et place, bien que plus précis, reste le plus 'poétique' pour créer des interfaces 'déstructurées'.

    columnspan permet d'étendre sur plusieurs colonnes (voir aussi rowspan).
    A voir aussi sticky (Tk.N, Tk.E, Tk.W et Tk.S) qui permet de 'coller' à un angle.

    Normal que l.image= photo n'apporte rien ici. On appelle cela garder la référence pour que l'interpréteur tcl dont Tkinter est un Wrapper ne se perde pas. ici nous n'avons qu'une instance Tkinter donc le problème ne se pose pas. C'est toutefois une 'bonne pratique'.

    @+

    Ps : Petite correction au passage.
    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
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    # Pensez à l'entête svp.
    # UMONS - Réalisé par Aline Clément et Jérôme Diricq - 2e BAC Chimie - 13/05/2011 #
    # Nom du programme : Sphérical bearings
    # compatibilité :
    # import os # Compatibilité avec quoi ?
    # Interface graphique :
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
     
    #-----------------------------définition des fonctions-------------------------
     
    # Fontion d'introduction du matériau :   
    def materiau(): # Pas de é svp dans le nom de la fonction.
        fen1 = Tk.Toplevel(fen)
        fen1.title("Matériaux")
        Tk.Label(fen1, text="#--------Matériaux--------#", fg="blue").grid(row=0, column=1, pady=5, padx=5) # Pas besoin de lab1 = si on n'as pas besoin du nom lab1 sous Python
        Tk.Label(fen1, text="introduisez le matériaux", fg="red").grid(row=1, column=0, pady=5, padx=5) # idem, ainssi que pour les autres.
        entr1 = Tk.Entry(fen1)
        entr1.grid(row=1, column=3, pady=5, padx=5)
        entr1.focus_set() # Les autres focus_set sont inutiles
        Tk.Label(fen1, text="le module d'Young", fg="red").grid(row=2, column=0, pady=5, padx=5)
        entr2 = Tk.Entry(fen1)
        entr2.grid(row=2, column=3, pady=5, padx=5)
        Tk.Label(fen1, text="le coefficient de poisson", fg="red").grid(row=3, column=0, pady=5, padx=5)
        entr3 = Tk.Entry(fen1)
        entr3.grid(row=3, column=3, pady=5, padx=5)
        Tk.Label(fen1, text="Rm", fg="red").grid(row=4, column=0, pady=5, padx=5)
        entr4 = Tk.Entry(fen1)
        entr4.grid(row=4, column=3, pady=5, padx=5)
        Tk.Label(fen1, text="Re", fg="red").grid(row=5, column=0, pady=5, padx=5)
        entr5 = Tk.Entry(fen1)
        entr5.grid(row=5, column=3, pady=5, padx=5)
        Tk.Button(fen1, text='Précédant', command=fen.deiconify).grid(row=6, column=0, pady=5, padx=5) # Pas besoin de bout1= 
        Tk.Button(fen1, text='Suivant').grid(row=6, column=3, pady=5, padx=5) # Idem
     
    #-------------------------------Corps du programme------------------------------
     
    fen = Tk.Tk()
    fen.title("Spherical bearing")
    lab = Tk.Label(fen, text="#--------Spherical bearing--------#", fg="blue").grid(row=0, column=1, pady=5, padx=5)
    photo = Tk.PhotoImage(file="cartoon_037.gif")
    l = Tk.Label(fen, image=photo)
    l.grid(row=1, column=1)
    Tk.Button(fen, text="Quit", fg="purple",command=fen.destroy).grid(row=2, column=0, pady=5, padx=5) # Pas besoin de b =. De toute maniere le Widget est créé et la commande stockée dans le command de celui-ci
    Tk.Button(fen, text="Start", fg="purple",command=materiau).grid(row=2, column=2, pady=5, padx=5) # Idem pour c = 
    fen.mainloop()
    @++

  18. #18
    Nouveau membre du Club
    Femme Profil pro
    étudiante
    Inscrit en
    Mai 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante

    Informations forums :
    Inscription : Mai 2011
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    merci beaucoup pour l'aide

    vos commentaires m'ont aidé énormement

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

Discussions similaires

  1. [ezPDF] Insertion d'une image !
    Par Dsphinx dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 22/03/2007, 14h27
  2. [RTF] Insertion d'une image BMP
    Par didinel dans le forum Autres langages
    Réponses: 20
    Dernier message: 04/12/2006, 17h34
  3. problème pour faire un insert avec une image
    Par vbcasimir dans le forum Modules
    Réponses: 3
    Dernier message: 02/11/2005, 09h21
  4. Insertion d'une image BMP dans un fichier RTF
    Par didinel dans le forum MFC
    Réponses: 8
    Dernier message: 18/08/2005, 09h24
  5. Insertion d'une image dans la une base mysql...
    Par Angeldu74 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 01/06/2005, 14h00

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