Bonjour,
Je suis en train de coder un programme de traitement d'image avec une photo dans un canevas et plusieurs boutons permettant d'y appliquer des filtres (pour l'instant il n'y a que le bouton filtre rouge)
Mon problème, c'est que lorsque que j'appuie sur le bouton (après bien sûr que la photo ai été placée ans la canevas), il ne se passe rien au niveau du canevas et je n'ai aucun message d'erreur.

Voila le programme principal :
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
 
from tkinter import *
from PIL import Image, ImageTk
from operations_image import *
 
global photo,L,H,dico_image
photo,L,H=0,0,0
dico_image={}
 
def ouvrir(event):
    global photo,L,H,dico_image
    photo=Image.open(entree.get())
    dico_image['photo']= photo
    (L,H)=photo.size
    can.configure(width=L, height=H)
    photo_tk = ImageTk.PhotoImage(photo) 
    dico_image['photo tk'] = photo_tk
    can.delete(fen,ALL)
    can.create_image(L//2,H//2,image =photo_tk)
    can.pack(side=RIGHT)
 
def traitement(operation):
    global dico_image
    traite=operation
    dico_image['photo traitee']=traite
    traite_tk=ImageTk.PhotoImage(traite)
    dico_image['photo traitee tk']=traite_tk
    can.delete(fen,ALL)
    can.create_image(L//2,H//2,image=traite_tk)
 
 
 
 
if __name__ == "__main__":
	fen=Tk()
	can=Canvas(fen, width =5, height =5)
	new=Traitement()
 
	entree=Entry(fen)
	entree.bind('<Return>',ouvrir)
	entree.pack()
 
 
	Button(fen,text='Filtre rouge',command=traitement(new.filtrerouge(photo,L,H))).pack(side=LEFT)
 
	fen.mainloop()
Et voilà operations_image.py :
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
 
from PIL import Image
 
class Traitement(object):
 
    def filtrerouge(self,image,Longueur,Hauteur):
        "Filtre ne laissant passer que le rouge"
        self.filtrerouge=Image.new('RGB', (Longueur,Hauteur))
        for x in range(Longueur):
            for y in range (Hauteur):
                p=image.getpixel((x,y))
                self.filtrerouge.putpixel((x,y), (p[0],0,0))
        return self.filtrerouge
 
    def filtrevert(self,image,Longueur,Hauteur):
        "Filtre ne laissant passer que le vert"
        self.filtrevert=Image.new('RGB', (Longueur,Hauteur))
        for x in range(Longueur):
            for y in range (Hauteur):
                p=image.getpixel((x,y))
                self.filtrevert.putpixel((x,y), (0,p[1],0))
        return self.filtrevert
 
    def filtrebleu(self,image,Longueur,Hauteur):
        "Filtre ne laissant passer que le bleu"
        self.filtrebleu=Image.new('RGB', (Longueur,Hauteur))
        for x in range(Longueur):
            for y in range (Hauteur):
                p=image.getpixel((x,y))
                self.filtrebleu.putpixel((x,y), (0,0,p[2]))
        return self.filtrebleu
Pourriez-vous m'aider ?

PS : Mon ordinateur tourne sous Windows7 64 bits et j'utilise python 3.3.4