IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Tkinter Ajout de photos en .PPM


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2021
    Messages : 10
    Par défaut Tkinter Ajout de photos en .PPM
    Bonjour à tous,

    Comme souligné dans l'intitulé de la conversation, je suis actuellement à la recherche d'une âme bienveillante pour m'aider sur un problème que je rencontre avec tkinter.

    Je souhaite actuellement créer une interface graphique qui servira plus tard à faciliter l'exécution de plusieurs actions. Je bloque actuellement sur quelque chose qui me semble pourtant trivial : l'ajout d'une photo en .ppm...

    Après exécution du script, l'erreur suivante apparait : raise RuntimeError('Too early to create image')
    RuntimeError: Too early to create image.

    Après quelques recherches, il semblerait que cette dernière apparaisse lorsque le canva n'a pas encore été créé, chose qui, si je ne me trompe pas n'est pas mon cas.

    Je vous joins le code ci dessous

    Un très grand merci par avance pour toute l'aide que vous pourrez m'apporter !

    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
     
    from tkinter import *
    from tkinter.messagebox import * # boîte de dialogue
     
    # Petite partie sur les couleurs
     
    color1 = '#C1ECFF'
     
     
    def Verification():
        if Motdepasse.get() == 'XXXXXXXXXXX':
            # le mot de passe est bon : on affiche une boîte de dialogue puis on ferme la fenêtre
            showinfo('Résultat','Mot de passe correct.')
            Mafenetre.destroy()
     
            # Création de la nouvelle fenêtre
            New_fenetre = Tk()
            New_fenetre.title("Assistant XXXX")
     
            w=600
            h=400
            ws = New_fenetre.winfo_screenwidth()
            hs = New_fenetre.winfo_screenheight()
            x = (ws/2) - (w/2)
            y = (hs/2) - (h/2)
            New_fenetre.geometry('%dx%d+%d+%d' % (w, h, x, y))
     
            New_fenetre.tk_setPalette(background='#C1ECFF', foreground='black',
                   activeBackground='black', activeForeground=color1)
     
            # Création d'un widget label (texte 'Bienvenue sur l'assistant XXX')
            label = Label(New_fenetre, text = "Bienvenue sur l'assistant XXX")
            label.pack(side = LEFT, padx = 5, pady = 5)
     
            New_fenetre.mainloop()
     
            # Ajout du logo de XXXX
     
            mon_image = PhotoImage(file = "logo XXXX.ppm")
            largeur = mon_image.width()  # dimensions en nombre de pixels
            hauteur = mon_image.height()
     
            zone_image = Canvas(New_fenetre, width = largeur, height = hauteur) # crée un canevas de dimensions ajustées à celles de l'image
            zone_image.create_image(0,0, anchor = NW, image = mon_image) # association image/widget
            zone_image.pack(side = LEFT, padx = 5, pady = 5) # placement du widget
     
        else:
            # le mot de passe est incorrect : on affiche une boîte de dialogue
            showwarning('Résultat','Mot de passe incorrect.\nVeuillez recommencer !')
            Motdepasse.set('')
     
    # Création de la fenêtre principale (main window)
    Mafenetre = Tk()
    Mafenetre.title('Identification requise')
     
    # Création d'un widget Label (texte 'Mot de passe')
    Label1 = Label(Mafenetre, text = 'Mot de passe ')
    Label1.pack(side = LEFT, padx = 5, pady = 5)
     
    # Création d'un widget Entry (champ de saisie)
    Motdepasse= StringVar()
    Champ = Entry(Mafenetre, textvariable= Motdepasse, show='*', bg ='bisque', fg='maroon')
    Champ.focus_set()
    Champ.pack(side = LEFT, padx = 5, pady = 5)
     
    # Création d'un widget Button (bouton Valider)
    Bouton = Button(Mafenetre, text ='Valider', command = Verification)
    Bouton.pack(side = LEFT, padx = 5, pady = 5)
     
    Mafenetre.mainloop()
    PS: Je précise au cas où que la photo en question est situé dans le même dossier que l'enregistrement du fichier python

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

    On a ce message lorsque la fenêtre principale n'a pas été créée ou a été détruite.
    Vous n'êtes pas supposé(*) avoir 2 appels Tk() mais un seul (les autres étant des fenêtres secondaires créées via Toplevel())
    (*) sinon vous sauriez comment faire avec...

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

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2021
    Messages : 10
    Par défaut
    Hello Wiztricks,

    Je te remercie pour ta réponse ! J'ai ainsi modifié mon code 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
    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
    from tkinter import *
    from tkinter.messagebox import * # boîte de dialogue
     
    # Petite partie sur les couleurs
     
    color1 = '#C1ECFF'
     
     
    def Verification():
        if Motdepasse.get() == 'XXXXXXXXXXX':
            # le mot de passe est bon : on affiche une boîte de dialogue puis on ferme la fenêtre
            showinfo('Résultat','Mot de passe correct.')
            Mafenetre.destroy()
     
            # Création de la nouvelle fenêtre
            New_fenetre = Toplevel()
            New_fenetre.title("Assistant XXXX")
     
            w=600
            h=400
            ws = New_fenetre.winfo_screenwidth()
            hs = New_fenetre.winfo_screenheight()
            x = (ws/2) - (w/2)
            y = (hs/2) - (h/2)
            New_fenetre.geometry('%dx%d+%d+%d' % (w, h, x, y))
     
            New_fenetre.tk_setPalette(background='#C1ECFF', foreground='black',
                   activeBackground='black', activeForeground=color1)
     
            # Création d'un widget label (texte 'Bienvenue sur l'assistant XXX')
            label = Label(New_fenetre, text = "Bienvenue sur l'assistant XXX")
            label.pack(side = LEFT, padx = 5, pady = 5)
     
            New_fenetre.mainloop()
     
            # Ajout du logo de XXXX
     
            mon_image = PhotoImage(file = "logo XXXX.ppm")
            largeur = mon_image.width()  # dimensions en nombre de pixels
            hauteur = mon_image.height()
     
            zone_image = Canvas(New_fenetre, width = largeur, height = hauteur) # crée un canevas de dimensions ajustées à celles de l'image
            zone_image.create_image(0,0, anchor = NW, image = mon_image) # association image/widget
            zone_image.pack(side = LEFT, padx = 5, pady = 5) # placement du widget
     
        else:
            # le mot de passe est incorrect : on affiche une boîte de dialogue
            showwarning('Résultat','Mot de passe incorrect.\nVeuillez recommencer !')
            Motdepasse.set('')
     
    # Création de la fenêtre principale (main window)
    Mafenetre = Tk()
    Mafenetre.title('Identification requise')
     
    # Création d'un widget Label (texte 'Mot de passe')
    Label1 = Label(Mafenetre, text = 'Mot de passe ')
    Label1.pack(side = LEFT, padx = 5, pady = 5)
     
    # Création d'un widget Entry (champ de saisie)
    Motdepasse= StringVar()
    Champ = Entry(Mafenetre, textvariable= Motdepasse, show='*', bg ='bisque', fg='maroon')
    Champ.focus_set()
    Champ.pack(side = LEFT, padx = 5, pady = 5)
     
    # Création d'un widget Button (bouton Valider)
    Bouton = Button(Mafenetre, text ='Valider', command = Verification)
    Bouton.pack(side = LEFT, padx = 5, pady = 5)
     
    Mafenetre.mainloop()
    Néanmoins, de là découle deux problèmes:

    - Le premier concerne l'image, qui ne se charge toujours pas. Le message d'erreur a néanmoins changé pour le suivant: _tkinter.TclError: couldn't open ... no such file or directory. Je ne comprend pas pourquoi ce message d'erreur intervient alors même que l'image en question est enregistré dans le même dossier que le script.

    - Le second, vient selon moi de la modification réalisée (toplevel). J'ai surement du faire une erreur puisque maintenant une fois l'authentification effectuée, non pas une mais bien deux fenêtres s'ouvrent simultanément. La première avec les caractéristiques demandées (taille, couleur.... mais bien sans l'image) et la seconde (dont je souhaiterais me débarrasser) dont le nom est #21 (le nombre augmentant eu gré des exécutions du script).

    Un très grand merci par avance à tous ceux qui pourront m'aider dans la résolutions de ces problèmes

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Bonjour

    - rajoute la lib pathlib : from pathlib import Path
    - ligne 38 : mon_image = PhotoImage(file = Path("logo XXXX.ppm"))

    Je pense que tu as un soucis sur le chemin absolu de ton image.

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Si ça ne fonctionne pas, cherche à savoir quel répertoire est le répertoire courant de ton programme au moment où tu demandes le chargement de l'image PPM.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from pathlib import Path
    print(f'dossier courant actuel : {Path.cwd()}'
    La seconde ligne est à placer à l'emplacement adéquat hein, juste avant le chargement de l'image

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2021
    Messages : 10
    Par défaut
    Salut Arioch,

    Merci beaucoup pour ta réponse.

    J'ai bien pris en compte tes suggestions mais malgré çela, le message d'erreur reste identique et l'image refuse de se charger....

    EDIT: Suite à ton deuxième message j'ai récupéré le chemin dans lequel se trouve le programme au moment ou je demande le chargement de l'image PPM, et il se trouve qu'il s'agit du bon dossier (dans lequel se trouve l'image en .PPM).
    Par contre le Shell m'indique maintenant une erreur de syntaxe sur la ligne suivante (bloquant bien entendu l'exécution des lignes d'après)....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon_image = PhotoImage(file = Path("logo XXXX.ppm"))
    Encore merci

  7. #7
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Je viens de rajouter une réponse juste au dessus. Regarde

Discussions similaires

  1. Ajout zone photo avec action sur un bouton
    Par spidercrash dans le forum VB.NET
    Réponses: 3
    Dernier message: 13/09/2008, 09h00
  2. [Tkinter] Ajouter un element dans OptionMenu
    Par t_om84 dans le forum Tkinter
    Réponses: 12
    Dernier message: 29/05/2008, 17h46
  3. Ajouter un photo a travers une form.
    Par lazins dans le forum C#
    Réponses: 6
    Dernier message: 09/03/2008, 13h17
  4. [ETAT] ajout de photos dans un etat
    Par Satan dans le forum IHM
    Réponses: 1
    Dernier message: 07/06/2007, 17h27
  5. Comment ajouter une photo à mon profil ?
    Par ghita269 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 5
    Dernier message: 18/11/2005, 20h36

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