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 :

Remplacer une image par une autre + Bouton + Frame


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Par défaut Remplacer une image par une autre + Bouton + Frame
    Salut !
    De retour avec mes problèmes.

    J'ai une image par défaut qui se charge à l'ouverture de ma fenêtre "none.png"
    J'ai cree un bouton "Add Pic" pour pouvoir insérer une autre image.
    L'image s'insert bien.
    Mais j'ai un message dans le debugger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    panel.image = img
    NameError: name 'panel' is not defined
    OK, on me dira que c'est pas defini. Mais comment définir panel.image ?

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    from tkinter import *
    from tkinter import ttk
    import sqlite3
    import tkinter as tk
    from tkinter import messagebox
    import os
    import configparser
    import tkinter
    from PIL import Image, ImageTk
    from tkinter import filedialog
    from PIL import ImageTk, Image
    import tkinter
     
    Product = Tk()
    Product.title ('App - Add Product')
    Product.iconbitmap(r'./local/pics/App.ico')
     
     
    #SHOW IMAGE IN FRAME
    def openfn():
        filename = filedialog.askopenfilename(title='App - Select a pic')
        return filename
    def open_img():
        x = openfn()
        img = Image.open(x)
        img = img.resize((100, 100), Image.ANTIALIAS)
        img = ImageTk.PhotoImage(img)
        Label(frame, image=img).grid (row = 4, column = 0)
        panel.image = img
        #panel.pack()
    #SHOW IMAGE IN FRAME
    def save_image():
        print(image_names)
     
    frame = LabelFrame (Product, text = 'Product Name')
    frame.grid (row = 0, column =  0)
    Label (frame, text = 'Product:').grid (row = 1, column = 0)
    name = ttk.Entry(frame)
    name.grid (row = 2, column = 0)
    Label (frame, text = 'Pic:').grid (row = 3, column = 0)
     
    ###OPEN DEFAULT IMAGE
    stim_filename = "./local/pics/none.png"
    PIL_image = Image.open(stim_filename)
    width = 100
    height = 100
    use_resize = False
    if use_resize:
        PIL_image_small = PIL_image.resize((width,height), Image.ANTIALIAS)
    else:
        PIL_image_small = PIL_image
        PIL_image_small.thumbnail((width,height), Image.ANTIALIAS)
    img = ImageTk.PhotoImage(PIL_image_small)
    Label(frame, image = img).grid (row = 4, column = 0)
    #in_frame.pack()
    ###OPEN DEFAULT IMAGE
     
    Button (frame, text = 'Add Pic', command=open_img).grid (row = 5, column = 0)
    Button (Product, text = 'save', command=save_image).grid (row = 5, column = 0, sticky =SW)
     
    Product.mainloop()
    Que dois je mettre pour éliminer cette erreur ?
    Merci d'avance.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 742
    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 742
    Par défaut
    Citation Envoyé par superthx Voir le message
    OK, on me dira que c'est pas defini. Mais comment définir panel.image ?
    C'est "panel" qui n'est pas défini...
    Peut être que vous vouliez y assigner le Label?

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

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Par défaut
    wiztricks, toujours premier ! Bravo....
    Je ne sais pas a vrai dire.
    Je m'explique, dans ce qui est commenté #OPEN DEFAULT IMAGE je n'ai pas ce problème.
    Par contre si je laisse "def open_img()" comme ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #SHOW IMAGE IN FRAME
    def openfn():
        filename = filedialog.askopenfilename(title='App - Select a pic')
        return filename
    def open_img():
        x = openfn()
        img = Image.open(x)
        img = img.resize((100, 100), Image.ANTIALIAS)
        img = ImageTk.PhotoImage(img)
        Label(frame, image=img).grid (row = 4, column = 0)
     
        #panel.image
        #panel.pack()
    #SHOW IMAGE IN FRAME
    panel.image commenté je n'ai aucune qui apparait.
    J'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    One of the two will be used. Which one is undefined.
    Qu'est-ce qui génère cet erreur?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 742
    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 742
    Par défaut
    Citation Envoyé par superthx Voir le message
    Je ne sais pas a vrai dire.
    Avec Python une variable n'est définie qu'après lui avoir assigné quelque chose. A défaut, c'est NameError.
    Alors si vous ne savez pas à quoi correspond panel, ben moi non plus: c'est votre code!


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

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Par défaut
    Je vais reprendre plus simplement voir si je comprends :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    def openfn():
        filename = filedialog.askopenfilename(title='App - Select a pic') #2<-Ouvre un fenêtre pour choisir son fichier.
        return filename #3<-retourne ou se trouve mon fichier du fichier
    def open_img():
        x = openfn() #1<-Appel def openfn()
        img = Image.open(x) #4<-Ouvre x de #3.
        img = img.resize((100, 100), Image.ANTIALIAS  #5<-redimensionne l'image
        img = ImageTk.PhotoImage(img) #6<-Ouvre img comme image
        Label(frame, image=img).grid (row = 4, column= 0)#7<- le Label situé dans le frame, placé à r4,c0 doit renvoyé img
    Est-ce que deja j'ai bon ?
    Une fois selectionné le fichier j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    One of the two will be used. Which one is undefined.
    Pourquoi ?

    Le code entier pour faire un test simple

    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
    from tkinter import *
    from tkinter import ttk
    import sqlite3
    import tkinter as tk
    from tkinter import messagebox
    import os
    import configparser
    import tkinter
    from PIL import Image, ImageTk
    from tkinter import filedialog
    from PIL import ImageTk, Image
    import tkinter
     
    Product = Tk()
    Product.title ('App - Add Product')
    Product.iconbitmap(r'./local/pics/App.ico')
     
    def openfn():
        filename = filedialog.askopenfilename(title='App - Select a pic')
        return filename
    def open_img():
        x = openfn()
        img = Image.open(x)
        img = img.resize((100, 100), Image.ANTIALIAS)
        img = ImageTk.PhotoImage(img)
        Label(frame, image=img).grid (row = 4, column = 0)
     
     
    frame = LabelFrame (Product, text = 'Product Name')
    frame.grid (row = 0, column =  0)
    Label (frame, text = 'Product:').grid (row = 1, column = 0)
    name = ttk.Entry(frame)
    name.grid (row = 2, column = 0)
    Label (frame, text = 'Pic:').grid (row = 3, column = 0)
     
    Button (frame, text = 'Add Pic', command=open_img).grid (row = 5, column = 0)
     
    Product.mainloop()
    Donc pourquoi rien n'est afficher?
    Merci

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 742
    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 742
    Par défaut
    Salut,

    Citation Envoyé par superthx Voir le message
    Une fois selectionné le fichier j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    One of the two will be used. Which one is undefined.
    Pourquoi ?
    Ça ne ressemble pas à un message d'erreur Python et, chez moi, filedialog.askopenfilename n'a pas ce soucis. Probable que çà dépende de votre environnement: cherchez sur Internet.

    Citation Envoyé par superthx Voir le message
    Donc pourquoi rien n'est afficher?
    Parce qu'il faut garder une référence à l'image comme documenté dans la FAQ ou la documentation).
    Et c'était probablement l'intention de l'instruction panel.image = img...

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

Discussions similaires

  1. Remplacement d'images par d'autres
    Par andre_21 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/09/2011, 20h39
  2. Remplacer un caractère par un autre dans une String
    Par djack44 dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 12/03/2008, 15h16
  3. Réponses: 2
    Dernier message: 22/10/2007, 17h50
  4. Réponses: 3
    Dernier message: 21/07/2007, 01h48
  5. Parser une page pour remplaçer des mots par d'autres
    Par HALOMOTO dans le forum Langage
    Réponses: 13
    Dernier message: 13/07/2006, 22h58

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