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

GUI Python Discussion :

Erreur avec la bibliothèque PIL


Sujet :

GUI Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    décembre 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2010
    Messages : 27
    Points : 21
    Points
    21
    Par défaut Erreur avec la bibliothèque PIL
    Bonjour
    Je veux dessiner un drapeau français.
    Pour cela j'ai écrit le script 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
     
    from PIL import Image
    #from tkinter import *
     
     
     
    taille=int(input("Longeur du drapeau"))  #Longueur du drapeau
    longueur=taille
    hauteur=int(longueur*2/3)   #Calcul de la hauteur du drapeau
    bande=int(longueur/3)       #Calcul largeur de chaque bande
    img=Image.new('RGB',(longueur,hauteur),(255,255,255)) #Creation de l'image
     
    for C in range(bande):              #Tracage de la bande bleue
        for L in range(hauteur):
            img.putpixel((C,L),(14,10,70))
     
    for C in range(bande,2*bande):      #Tracage de la bande blanche
        for L in range(hauteur):
            img.putpixel((C,L),(255,255,255))
     
    for C in range(2*bande,3*bande):    #Tracage de la bande rouge
        for L in range(hauteur):
     
            img.putpixel((C,L),(246,18,18))
     
     
    img.show()
    nom="drapeau-france"+str(taille)+".jpeg"
    print(nom)
    img.save(nom, 'jpeg')
    Ce code fonctionne très bien. J'entre la valeur de la longueur du drapeau avec un input

    Pour améliorer et manipuler la bibiothèque tkinter, je veux entrer cette valeur à l'aide d'un curseur avec le code 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
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    from PIL import Image
    from tkinter import *
     
    def maj(nouvelleValeur):
        # nouvelle valeur en argument
        print(nouvelleValeur)
     
    def plus():
        Valeur.set(str(int(Valeur.get())+100))
        print(Valeur.get())
     
    def moins():
        Valeur.set(str(int(Valeur.get())-100))
        print(Valeur.get())
     
    def Validation():
        Mafenetre.destroy()
     
    # Création de la fenêtre principale (main window)
    Mafenetre = Tk()
    Mafenetre.title("Taille du drapeau ")
     
    taille = StringVar()
    taille.set(0)
     
    # Création d'un widget Scale
    echelle = Scale(Mafenetre,from_=0,to=1200,resolution=100,orient=HORIZONTAL,\
    length=300,width=20,label="Choisir la dimension",tickinterval=20,variable=taille,command=maj)
    echelle.pack(padx=10,pady=10)
     
    # Création d'un widget Button (bouton OK)
    Button(Mafenetre,text="OK",command=Validation).pack(padx=10,pady=10)
     
    Mafenetre.mainloop()
    #print("--->",taille.get())
     
    #taille=int(input("Longeur du drapeau"))  #Longueur du drapeau
    longueur=int(taille.get())
    hauteur=int(longueur*2/3)   #Calcul de la hauteur du drapeau
    bande=int(longueur/3)       #Calcul largeur de chaque bande
    img=Image.new('RGB',(longueur,hauteur),(255,255,255)) #Creation de l'image
     
    for C in range(bande):              #Tracage de la bande bleue
        for L in range(hauteur):
            img.putpixel((C,L),(14,10,70))
     
    for C in range(bande,2*bande):      #Tracage de la bande blanche
        for L in range(hauteur):
            img.putpixel((C,L),(255,255,255))
     
    for C in range(2*bande,3*bande):    #Tracage de la bande rouge
        for L in range(hauteur):
     
            img.putpixel((C,L),(246,18,18))
     
     
    img.show()
    nom="drapeau-france"+str(taille)+".jpeg"
    print(nom)
    img.save(nom, 'jpeg')
    Je ne comprends pas mon erreur. alors que cela marche parfaitement sans le curseur.
    Il me dit que l'attribut new n'existe pas.

    Merci de votre aide

    Boboss76
    Images attachées Images attachées  

  2. #2
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    14 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 14 505
    Points : 24 544
    Points
    24 544
    Par défaut
    Salut,

    Citation Envoyé par boboss76 Voir le message
    Je ne comprends pas mon erreur. alors que cela marche parfaitement sans le curseur.
    Il me dit que l'attribut new n'existe pas.
    L'erreur est induite par vos imports:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from PIL import Image
    from tkinter import *
    Le premier crée une variable Image associée à PIL.Image.
    Le second l'écrase avec l'Image définit par tkinter.

    Evitez les from ... import * et çà ira mieux.

    Pour le reste, il y a du boulot mais je ne vais pas vous gâcher le plaisir de le découvrir et de poser d'autres questions....

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

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    décembre 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2010
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    Hello wiztricks
    Merci de ton aide.
    Tu me dis

    Evitez les from ... import * et çà ira mieux.
    Que dois je mettre à la place pour éviter l'écrasement de la variable?

    Merci

    Boboss

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    décembre 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2010
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    OK j'ai trouvé

    J'ai mis les fonctions appelées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from tkinter import Tk, StringVar,Scale,HORIZONTAL,Button
    Et là ça marche.

    Existe-il un autre moyen sans avoir à appeler toutes les fonctions utilisées ?

    Merci.

    Boboss

  5. #5
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    14 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 14 505
    Points : 24 544
    Points
    24 544
    Par défaut
    Citation Envoyé par boboss76 Voir le message
    Que dois je mettre à la place pour éviter l'écrasement de la variable?
    Par exemple import Tkinter as tk. Ce qui vous obligera à préfixer par "tk." les différents objets de tkinter.

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

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    décembre 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2010
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    J'ai testé la ligne import tkinder as Tk

    et j'obtiens 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
    from PIL import Image
    import tkinter as Tk
    #from tkinter import Tk, StringVar,Scale,HORIZONTAL,Button
     
    def maj(nouvelleValeur):
        # nouvelle valeur en argument
        print(nouvelleValeur)
     
    def plus():
        Valeur.set(str(int(Valeur.get())+100))
        print(Valeur.get())
     
    def moins():
        Valeur.set(str(int(Valeur.get())-100))
        print(Valeur.get())
     
    def Validation():
        Mafenetre.destroy()
     
    # ‚ªtre principale (main window)
    Mafenetre = Tk()
    Mafenetre.title("Taille du drapeau ")
     
    taille = StringVar()
    J'ai une erreur ligne 21: Type Error module objet is not callable.

    Merci de ton aide.

    Boboss

  7. #7
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    14 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 14 505
    Points : 24 544
    Points
    24 544
    Par défaut
    Citation Envoyé par boboss76 Voir le message
    Merci de ton aide.
    Ce n'est pas pour rien que j'ai pris la peine de préciser "Ce qui vous obligera à préfixer par "tk." les différents objets de tkinter."

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

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    décembre 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2010
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ce n'est pas pour rien que j'ai pris la peine de préciser "Ce qui vous obligera à préfixer par "tk." les différents objets de tkinter."

    - W
    J'ai essayé ceci mais pas plus de succès

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from PIL import Image
    import tkinter as Tk
    #from tkinter import Tk, StringVar,Scale,HORIZONTAL,Button
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #creation principale (main window)
    #Mafenetre = Tk
    Tk.title("Taille du drapeau ")
    Peux tu me corriger STP ?
    Merci

  9. #9
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    14 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 14 505
    Points : 24 544
    Points
    24 544
    Par défaut
    Citation Envoyé par boboss76 Voir le message
    J'ai essayé ceci mais pas plus de succès
    Et si vous commenciez par essayer de comprendre la différence entre import Tkinter, import Tkinter as tk, from Tkinter import * ?
    Vous avez des tutos qui racontent çà très bien.

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

Discussions similaires

  1. Erreur lors de compilation avec une bibliothèque externe
    Par Nouri.Mdafer dans le forum Fortran
    Réponses: 6
    Dernier message: 31/03/2016, 15h52
  2. Erreur avec la bibliothèque curl
    Par Ceubex dans le forum Bibliothèques
    Réponses: 5
    Dernier message: 06/11/2007, 01h55
  3. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 16h45
  4. Erreur avec les ADO
    Par megane dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2004, 22h37
  5. Erreur avec WM_COMMAND (BN_CLICKED)
    Par cyberlewis dans le forum Windows
    Réponses: 2
    Dernier message: 09/02/2004, 01h25

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