Bonjour,
J'ai créer une classe BalanceRVB dérivée de la classe Frame, composée de trois curseurs et je souhaite l’intégrer au programme principal.
Voilà le programme principal (que j'écourte volontairement en enlevant les nombreuses fonctions qui y sont parce qu’il est trop long) :
Et voilà la classe que j'ai importé depuis un autre fichier:
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 from tkinter import * from PIL import Image, ImageTk from operations_image import * class TraitementImage2(Frame): "Traitement d'image dans sa version 2.0" def __init__(self,master=None,**Arguments): Frame.__init__(self,master,**Arguments) can=Canvas(self, width =5, height =5) Label(self,text="Entrez le nom du fichier :").grid(sticky=E) entree=Entry(self) entree.bind('<Return>',ouvrir) entree.grid(row=0,column=1,sticky=W) Button(self,text='Filtre rouge',command=traitement_rouge,width=13).grid(row=1) Button(self,text='Filtre vert',command=traitement_vert,width=13).grid(row=2) Button(self,text='Filtre bleu',command=traitement_bleu,width=13).grid(row=3) Button(self,text='Niveau de gris',command=traitement_gris,width=13).grid(row=4) Button(self,text='Négatif',command=traitement_nega,width=13).grid(row=5) Button(self,text='Miroir horizontal',command=traitement_miroirhz,width=13).grid(row=6) Button(self,text='Miroir vertical',command=traitement_miroirvt,width=13).grid(row=7) Button(self,text='Roation 180°',command=traitement_rotation180,width=13).grid(row=8) Button(self,text='Photomaton',command=fen_nbappli,width=13).grid(row=9) Button(self,text="Enregistrer sous",command=enregistrer_sous,width=12).grid(row=30,column=3,padx=3,pady=3) Button(self,text="Appliquer",command=appliquer,width=12).grid(row=29,column=3,padx=3,pady=3) Button(self,text='Reset',command=resetCanvas,width=7).grid(row=30) Button(self,text='Annuler',command=undoCanvas,width=7).grid(row=29) BalanceRVB(self).grid(row=1,column=3,rowspan=20) if __name__ == "__main__": root=Tk() root.title('Traitement Image 2.0') fra=TraitementImage2(root) fra.pack(side=LEFT) root.mainloop()
Le problème c'est qu'avec la méthode .grid() , le programme ne démarre même pas : le Shell me dit qu'un programme est en cours quand je veux le fermer mais rien ne s'affiche.
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 class BalanceRVB(Frame): """Curseurs pour faire la balance RVB""" def __init__(self, maitre=None): Frame.__init__(self) # constructeur de la classe parente # Définition de quelques attributs d'instance : self.r, self.v, self.b = 0, 0, 0 # Définition des 3 widgets curseurs : Scale(self, activebackground='red',length=255, orient=VERTICAL, sliderlength =15, from_=255, to=-255,resolution =1, showvalue =1, command = self.setRouge).grid(row=0,column=0) Scale(self, activebackground='green',length=255, orient=VERTICAL, sliderlength =15, from_=255, to=-255,resolution =1, showvalue =1, command = self.setVert).grid(row=0,column=1) Scale(self, activebackground='blue',length=255, orient=VERTICAL, sliderlength =15, from_=255, to=-255,resolution =1, showvalue =1, command = self.setBleu).grid(row=0,column=2) def setRouge(self, r): self.r = int(r) self.event_generate('<Control-Z>') def setVert(self, v): self.v=int(v) self.event_generate('<Control-Z>') def setBleu(self, b): self.b = int(b) self.event_generate('<Control-Z>') if __name__ == '__main__': def afficherTout(event=None): lab.configure(text = '{0} - {1} - {2}'.\ format(fra.r, fra.v, fra.b)) root = Tk() fra = BalanceRVB(root) fra.pack(side =TOP) lab = Label(root, text ='test') lab.pack() root.bind('<Control-Z>', afficherTout) root.mainloop()
Cependant, avec la méthode pack() ça marche, mais c'est vraiment peu usuel par rapport avec grid()
Pourriez éclairer ma lanterne et m'expliquer ce qui se passe et ce que je dois faire ?
Partager