Logiciel de dessin

.

télécharger application dessin

.

Vidéo

download html5 video by EasyHtml5Video.com v4.0

Vidéo
html5 video api by EasyHtml5Video.com v3.9.1
Programmation orientée objet
OBJECTIF

Construire un programme qui possède un menu pour faire des dessins et pour les sauvegarder dans des fichiers

  • Afficher une fenêtre, avec un titre .
  • Inclure dans la fenêtre un canevas (Canvas) pour afficher des figures qui peuvent se déplacer .
  • Utiliser les fichiers pour stocker les créations.

.

Le code du programme:

_images/tpage10001.PNG
_images/tpage10002.PNG
_images/tpage10003.PNG
Affichage de la classe logiciel

.

#1106 dessiner.py from tkinter import* from tkinter.colorchooser import* import subprocess import os from math import* from tkinter.filedialog import* from PIL import ImageGrab ft=["verdana 20","verdana 22","verdana 24","verdana 26","verdana 28","verdana 30","verdana 32","verdana 34","verdana 36","verdana 38", "verdana 40","verdana 42","verdana 44","verdana 46","verdana 48","verdana 50","verdana 52","verdana 54","verdana 56","verdana 58", "verdana 60","verdana 62","verdana 64","verdana 66","verdana 68","verdana 70","verdana 72","verdana 74","verdana 76","verdana 78", "verdana 80","verdana 82","verdana 84","verdana 86","verdana 88","verdana 90","verdana 92","verdana 94","verdana 96","verdana 98", "verdana 100","verdana 102","verdana 104","verdana 106","verdana 108","verdana 110","verdana 112","verdana 114","verdana 116","verdana 118", "verdana 120","verdana 122","verdana 124","verdana 126","verdana 128","verdana 130","verdana 132","verdana 134","verdana 136","verdana 138", "verdana 140","verdana 142","verdana 144","verdana 146","verdana 148","verdana 150","verdana 152","verdana 154","verdana 156","verdana 158", "verdana 160","verdana 162","verdana 164","verdana 166","verdana 168","verdana 170","verdana 172","verdana 174","verdana 176","verdana 178", "verdana 180","verdana 182","verdana 184","verdana 186","verdana 188","verdana 190","verdana 192","verdana 194","verdana 196","verdana 198", "verdana 200","verdana 202","verdana 204","verdana 206","verdana 208","verdana 210","verdana 212","verdana 214","verdana 216","verdana 218", "verdana 220","verdana 222","verdana 224","verdana 226","verdana 228","verdana 230","verdana 232","verdana 234","verdana 236","verdana 238", "verdana 240","verdana 242","verdana 244","verdana 246","verdana 248","verdana 250","verdana 252","verdana 254","verdana 256","verdana 258"] ech=["♔","♕","♖","♗","♘","♙","♚","♛","♜","♝","♞","♟","⚀","⚁","⚂","⚃","⚄","⚅","⛳","⛴","⛵","⛩","⛪","⛺","⛰","⛷","⛹","⛄"] dess=["⚀","⚁","⚂","⚃","⚄","⚅"] maiso=["⛳","⛴","⛵","⛩","⛪","⛺","⛰"] perso=["⛷","⛹","⛄"] class logiciel(): """classe logiciel de base""" def __init__(self,donnees): #methode constructeur fenetre,self.can,largeur=donnees[0],donnees[1],donnees[2] hauteur,l_widgets,nb= donnees[3],donnees[4],donnees[5] self.d=donnees self.fen=[fenetre,str(donnees[2])+"x"+str(donnees[3]),"Logiciel","white"] self.enregistrer=False self.texted="" self.saisie=StringVar() self.copie="" self.ltg=[] self.etol=[] self.etel=[] self.pro1=0 self.font='' self.fon=ft self.texte="" self.cf=0 self.obj=0 self.rayon1=0 self.dim=0 self.nombre=12 self.pro=50 self.rayon=100 self.x=0 self.y=0 self.xinit=0 self.yinit=0 self.r=40 self.l_etoile=(self.nombre)*4*[0] self.avantx=[0,0] self.avanty=[0,0] self.delite=[] b1="non" self.tx,self.ty=largeur/2,hauteur/2 self.precedent=(None,None) self.transparent="" self.couleur='blue' self.couleur1='' self.widget=self.can.create_rectangle(self.xinit,self.yinit,self.x,self.y,fill=self.couleur) self.figure=0 self.fichier='' self.epaisseur=3 def creer_fenetre(self,fl): #fonction qui redimensionne, donne le titre #et l'icône de la fenêtre ainsi que la couleurfl[0] fl[0].geometry(fl[1]) # redimensionne la fenêtre fl[0].title(fl[2]) # affiche le titre dans la fenêtre fl[0].configure(bg=fl[3])# change la couleur du fond return fenetre def run(): c = reportlab.pdfgen.canvas.Canvas('colortest02.pdf') def courbe(self,fonction,debut,fin): #trace une courbe dans un canevas largeur,hauteur=self.d[2],self.d[3] hi=hauteur/2 #axe abscisses self.widget=self.can.create_line(20,hi,largeur-20,hi,fill="black",width=1,arrow=LAST) #axe des ordonnées self.widget=self.can.create_line(20,hauteur-20,20,20,fill="black",width=1,arrow=LAST) long=int(fin-debut) pas=int((largeur-40)/long) unite=int(hi/pas) for i in range(long): abscisse=i*pas self.widget=self.can.create_line(abscisse,hi-10,abscisse,hi+10,fill="black",width=1) self.widget=self.can.create_text(abscisse,hi+20,text=str(debut+i)) if i!=0: self.widget=self.can.create_line(abscisse,hi-10,abscisse,10,fill="black",width=1,dash=(3,5)) self.widget=self.can.create_line(abscisse,hi+20,abscisse,hauteur-20,fill="black",width=1,dash=(3,5)) for i in range(unite): ordonnee=i*pas self.widget=self.can.create_line(15,hi-i*pas,25,hi-i*pas,fill="black",width=1) if i!=0: self.widget=self.can.create_line(25,hi-i*pas,largeur-20,hi-i*pas,fill="black",width=1,dash=(3,5)) self.widget=self.can.create_line(25,hi+i*pas,largeur-20,hi+i*pas,fill="black",width=1,dash=(3,5)) self.widget=self.can.create_text(10,hi-i*pas,text=str(i)) self.widget=self.can.create_line(15,hi+i*pas,25,hi+i*pas,fill="black",width=1) self.widget=self.can.create_text(10,hi+i*pas,text=str(-i)) x1=20 y1=hi for i in range(0,1000*long): x=debut+i/(1000*long)*((long))*pas y=hi+pas*fonction(x*pi/(pas)) x= x-debut+20 self.widget=self.can.create_line(x1,y1,x,y,fill="red",width=2,smooth=1) x1,y1=x,y def change_couleur(self): #change la couleur de la figure coul="" self.transparent="non" coul=askcolor(coul) self.couleur=coul[1] self.couleur1=coul[1] def transparence(self): #effectue la transparence self.transparent="oui" def sans_trace(self,event): self.b1="non" def Aide(self): can=self.d[1] txt=self.can.create_text(260, 75, text="Pour dessiner click gauche souris", font="Arial 16 italic", fill="green") txt=self.can.create_text(260, 125, text="Pour déplacer les objets click droit souris", font="Arial 16 italic", fill="green") def liste_etoile(self,x,y): #"""création des coordoonées d'une étoile""" angle=10 # longueur de chaque branche nombre=self.nombre del self.l_etoile self.l_etoile=(self.nombre)*4*[0] pro=self.pro rayon=self.rayon arc=2*pi/nombre # longueur de chaque arc # liste des coordonnées des points for i in range(nombre): self.l_etoile[4*i]=int(x+rayon*cos(i*arc+angle)) self.l_etoile[4*i+1]=int(y-rayon*sin(i*arc+angle)) self.l_etoile[4*i+2]=int(x+(rayon+pro)*cos(i*arc+angle+arc/2)) self.l_etoile[4*i+3]=int(y-(rayon+pro)*sin(i*arc+angle+arc/2)) def tracer_letoil(self,x,y): #trace une etoile de centre (x,y) avec un nombre # de branches et avec la couleur self.avantx[1]=x self.avanty[1]=y self.pro=15 self.rayon=16 self.liste_etoile(x,y) clair=self.transparent if clair=="non": self.etol.append(self.can.create_polygon(self.l_etoile,fill=self.couleur,outline=self.couleur1,width=self.epaisseur,smooth=0)) else: self.etol.append(self.can.create_polygon(self.l_etoile,fill="",outline=self.couleur,width=self.epaisseur,smooth=0)) def tracer_etoile(self,x,y): nombre=5 self.nombre=5 angle=10 self.pro=15 self.rayon=15 self.tracer.letoil(x,y) def tracer_etoile1(self,x,y): nombre=4 self.nombre=4 angle=10 self.pro=15 self.rayon=15 self.tracer.letoil(x,y) def tracer_etoile2(self,x,y): nombre=8 self.nombre=8 angle=10 self.pro=15 self.rayon=15 self.tracer.letoil(x,y) def debut(self,event): #début du tracé texte1=self.texted self.b1="oui" clair=self.transparent self.precedent=(None,None) self.xinit,self.yinit=event.x,event.y x,y=self.xinit,self.yinit self.precedent=x,y epais=self.epaisseur if self.figure==1: if clair=="non": self.widget=can.create_rectangle(x-1,y-1,x+10,y+10,outline=self.couleur,fill=self.couleur1,width=epais) else: self.widget=can.create_rectangle(x-1,y-1,x+10,y+10,outline=self.couleur,fill='',width=epais) if self.figure==2: if clair=="non": self.widget=can.create_oval(x-1,y-1,x+10,y+10,outline=self.couleur,fill=self.couleur1,width=epais) else: self.widget=can.create_oval(x-1,y-1,x+10,y+10,outline=self.couleur,fill='',width=epais) if self.figure==3: self.widget=can.create_line(x-1,y-1,x,y,fill=self.couleur,width=epais) if self.figure==5: self.widget=can.create_line(x-1,y-1,x,y,fill=self.couleur,width=epais) if self.figure==6 or self.figure==7 or self.figure==8: if self.figure==6: self.nombre=5 self.pro=15 self.pro1=15 self.rayon1=16 self.rayon=16 if self.figure==7: self.nombre=4 self.pro=15 self.pro1=15 self.rayon1=10 self.rayon=10 if self.figure==8: self.nombre=8 self.pro=15 self.pro1=15 self.rayon1=16 self.rayon=16 self.avantx[1]=x self.avanty[1]=y self.liste_etoile(x,y) if clair=="non": self.widget=self.can.create_polygon(self.l_etoile,fill=self.couleur,outline=self.couleur1,width=self.epaisseur,smooth=0) else: self.widget=self.can.create_polygon(self.l_etoile,fill="",outline=self.couleur,width=self.epaisseur,smooth=0) if self.figure==9: self.cf=0 ft=["verdana 20","verdana 22","verdana 24","verdana 26","verdana 28","verdana 30","verdana 32","verdana 34","verdana 36","verdana 38", "verdana 40","verdana 42","verdana 44","verdana 46","verdana 48","verdana 50","verdana 52","verdana 54","verdana 56","verdana 58", "verdana 60","verdana 62","verdana 64","verdana 66","verdana 68","verdana 70","verdana 72","verdana 74","verdana 76","verdana 78", "verdana 80","verdana 82","verdana 84","verdana 86","verdana 88","verdana 90","verdana 92","verdana 94","verdana 96","verdana 98", "verdana 100","verdana 102","verdana 104","verdana 106","verdana 108","verdana 110","verdana 112","verdana 114","verdana 116","verdana 118", "verdana 120","verdana 122","verdana 124","verdana 126","verdana 128","verdana 130","verdana 132","verdana 134","verdana 136","verdana 138", "verdana 140","verdana 142","verdana 144","verdana 146","verdana 148","verdana 150","verdana 152","verdana 154","verdana 156","verdana 158", "verdana 160","verdana 162","verdana 164","verdana 166","verdana 168","verdana 170","verdana 172","verdana 174","verdana 176","verdana 178", "verdana 180","verdana 182","verdana 184","verdana 186","verdana 188","verdana 190","verdana 192","verdana 194","verdana 196","verdana 198", "verdana 200","verdana 202","verdana 204","verdana 206","verdana 208","verdana 210","verdana 212","verdana 214","verdana 216","verdana 218", "verdana 220","verdana 222","verdana 224","verdana 226","verdana 228","verdana 230","verdana 232","verdana 234","verdana 236","verdana 238", "verdana 240","verdana 242","verdana 244","verdana 246","verdana 248","verdana 250","verdana 252","verdana 254","verdana 256","verdana 258"] ech=["♔","♕","♖","♗","♘","♙","♚","♛","♜","♝","♞","♟","⚀","⚁","⚂","⚃","⚄","⚅","⛳","⛴","⛵","⛩","⛪","⛺","⛰","⛷","⛹","⛄"] texf=ech[self.obj] #print('cf',self.cf) self.font=ft[self.cf] self.widget=can.create_text(x,y,text=texf,font=self.font,fill=self.couleur) if self.figure==4: item=can.create_text(500,200,text=texte1,fill=self.couleur,justify='center',font="verdana 20 bold",anchor='n') def change(self,event): "Opération à effectuer quand le bouton gauche de la souris est enfoncé" # event.x et event.y contiennent les coordonnées du clic effectué : x1, y1 = event.x, event.y self.xinit,self.yinit=x1,y1 x0,y0=x1+5,y1+5 if self.figure<6: # <find_closest> renvoie la référence du dessin le plus proche : item = can.find_closest(x1,y1) item=can.addtag_overlapping("OME",x0, y0, x1, y1)# can.itemconfig("OME") can.lift("OME") if self.figure==9: # <find_closest> renvoie la référence du dessin le plus proche : item = can.find_closest(x1,y1) item=can.addtag_overlapping("OME",x0, y0, x1, y1)# can.itemconfig("OME") can.lift("OME") if self.figure==6 or self.figure==7 or self.figure==8: # <find_closest> renvoie la référence du dessin le plus proche : l_etoile=self.liste_etoile(x1,y1) item=can.addtag_overlapping("OME",x0,y0,x1,y1)# can.itemconfig("OME") can.lift("OME") def deplace(self,event): "Op. à effectuer quand la souris se déplace, bouton gauche enfoncé" x2, y2 = event.x, event.y self.x,self.y=x2,y2 dx, dy = x2 -self.xinit, y2 -self.yinit #selObject=can.addtag_enclosed("OME",x0, y0, x1, y1) # if selObject: can.move("OME", dx, dy) self.xinit,self.yinit = x2, y2 if x2<20 and y2<20: print('delete') can.delete("OME") def relache(self, event): "Op. à effectuer quand le bouton gauche de la souris est relâché" self.can.itemconfig("OME") self.can.dtag("OME","OME") def effacer(self, event): "Op. à effectuer quand le bouton gauche de la souris est relâché" print('effacer') self.can.delete("OME") def tracer_dessin(self,event): a=self.figure item=self.widget xd,yd=self.xinit,self.yinit item=self.widget x,y=event.x,event.y self.x,self.y = x, y self.avantx[1]=x self.avanty[1]=y xa=self.avantx[0] ya=self.avanty[0] couleur1=self.couleur1 couleur=self.couleur epais=self.epaisseur can=self.can if a==1 or a==2 : if self.transparent=="non": self.can.itemconfigure(item, width =epais,fill=self.couleur1) self.can.coords(item,xd,yd,x,y) else: self.can.itemconfigure(item, width =epais,fill='') self.can.coords(item,xd,yd,x,y) if a==4 : self.can.itemconfigure(item, width =epais) self.can.coords(item,xd,yd,x,y) if a==5: self.can.itemconfigure(item, width =epais) self.can.coords(item,xd,yd,x,y) if a==6 or a==7 or a==8: if int(self.pro+1)<120: dur=-1 if xa<x or ya>y:dur=1 self.pro=self.pro1+int(self.pro+1) self.rayon=self.pro1+int(self.rayon+1) self.liste_etoile(x,y) self.avantx[0]=x self.avanty[0]=y self.can.coords(item,self.l_etoile) if a==9: self.cf=abs(self.cf+1) #print('cf2',self.cf) ft=["verdana 20","verdana 22","verdana 24","verdana 26","verdana 28","verdana 30","verdana 32","verdana 34","verdana 36","verdana 38", "verdana 40","verdana 42","verdana 44","verdana 46","verdana 48","verdana 50","verdana 52","verdana 54","verdana 56","verdana 58", "verdana 60","verdana 62","verdana 64","verdana 66","verdana 68","verdana 70","verdana 72","verdana 74","verdana 76","verdana 78", "verdana 80","verdana 82","verdana 84","verdana 86","verdana 88","verdana 90","verdana 92","verdana 94","verdana 96","verdana 98", "verdana 100","verdana 102","verdana 104","verdana 106","verdana 108","verdana 110","verdana 112","verdana 114","verdana 116","verdana 118", "verdana 120","verdana 122","verdana 124","verdana 126","verdana 128","verdana 130","verdana 132","verdana 134","verdana 136","verdana 138", "verdana 140","verdana 142","verdana 144","verdana 146","verdana 148","verdana 150","verdana 152","verdana 154","verdana 156","verdana 158", "verdana 160","verdana 162","verdana 164","verdana 166","verdana 168","verdana 170","verdana 172","verdana 174","verdana 176","verdana 178", "verdana 180","verdana 182","verdana 184","verdana 186","verdana 188","verdana 190","verdana 192","verdana 194","verdana 196","verdana 198", "verdana 200","verdana 202","verdana 204","verdana 206","verdana 208","verdana 210","verdana 212","verdana 214","verdana 216","verdana 218", "verdana 220","verdana 222","verdana 224","verdana 226","verdana 228","verdana 230","verdana 232","verdana 234","verdana 236","verdana 238", "verdana 240","verdana 242","verdana 244","verdana 246","verdana 248","verdana 250","verdana 252","verdana 254","verdana 256","verdana 258"] if self.cf>100:self.cf=100 dfont=ft[self.cf] #print('font',dfont) self.can.itemconfigure(item,font=dfont) self.can.coords(item,x,y) ech=["♔","♕","♖","♗","♘","♙","♚","♛","♜","♝","♞","♟","⚀","⚁","⚂","⚃","⚄","⚅","⛳","⛴","⛵","⛩","⛪","⛺","⛰","⛷","⛹","⛄"] if a==3: xd,yd=self.precedent self.can.create_line(xd,yd, x,y,fill=self.couleur,width=epais) self.precedent=self.x,self.y def nom_fichier(self,saisie): self.figure=4 texteun="" texteun=self.copier(saisie) self.fichier=texteun def tracer_rectangle(self): self.figure=1 def tracer_ellipse(self): self.figure=2 def tracer_ligne(self): self.figure=3 def tracer_trait(self): self.figure=5 def tracer_etoile(self): self.figure=6 def tracer_etoile1(self): self.figure=7 def tracer_etoile2(self): self.figure=8 def tracer_maison(self, n): self.obj=n self.figure=9 def copier(self,saisie): copie=saisie.get() saisie.set("") textecl=copie self.enregistrer=True return textecl def framePage(canvas, title): canvas.setFont('Times-BoldItalic',20) canvas.drawString(inch, 10.5 * inch, title) canvas.setFont('Times-Roman',10) canvas.drawCentredString(4.135 * inch, 0.75 * inch, 'Page %d' % canvas.getPageNumber()) canvas.setStrokeColorRGB(1,0,0) canvas.setLineWidth(5) canvas.line(0.8 * inch, inch, 0.8 * inch, 10.75 * inch) #reset carefully afterwards canvas.setLineWidth(1) canvas.setStrokeColorRGB(0,0,0) def geoliste(self,g): g=g.replace("+"," ") g=g.replace("x"," ") lst=[] lst=g.split() return [int(lst[0]),int(lst[1]),int(lst[2]),int(lst[3])] def imprimer(self): fenetre=self.d[0] can=self.d[1] largeur,hauteur=self.d[2],self.d[3] can=self.d[1] largeur,hauteur=self.d[2],self.d[3] dimension=4*[0] dimension=self.geoliste(fenetre.geometry()) fichier11=open("save.txt","w") for i in range(1,5): fichier11.write(str(dimension[i-1])+"\n") fichier11.close() def epaisseur_trait3(self): self.epaisseur=3 def epaisseur_trait5(self): self.epaisseur=5 def epaisseur_trait8(self): self.epaisseur=8 def epaisseur_trait10(self): self.epaisseur=10 def clic(self,inutile,texte,liste): self.figure=4 can=self.d[1] self.texted=liste.get(liste.curselection())+" \n" texte1=self.texted item=Label(can,text=texte1,fill="red",justify='center',font="verdana 20 bold",anchor='n') self.widget=item def run(self): titre="Logiciel" ft="verdana 12 bold" fl=self.d fenetre=self.d[0] fenetre=self.creer_fenetre(self.fen) fenetre.resizable(width=False,height=False) can=self.d[1] fe=[self.fen[0],"Entrer les données","light blue"] #self.framePage(c, '-pages de démonstrations RGB CMYK ' ) # Creation du systeme de menu (variable explicite sysdemenu): sysdemenu = Menu(fenetre) # Creation du premier menu: menu1= Menu(sysdemenu) # Creation du second menu sysdemenu.add_cascade(label="Enregistrer",command=self.sauvegarder) menu1.configure(bg='light green') # addition des sous-items du second item du second menu et leur commande associee menu2 = Menu(sysdemenu) sysdemenu.add_cascade(label="Couleurs",command=lambda:self.change_couleur()) menu2.configure(bg='gold') # addition des deux items pour le premier menu et leur commande associee mt=["Rectangle","Ellipse","Ligne","Trait"] menu3 = Menu(sysdemenu) # Creation du second menu sysdemenu.add_cascade(label="DESSINS", menu=menu3) menu3.configure(bg='light blue') menu3.configure(fg='red') menu3.add_command(compound='center',label='Rectangle',command=self.tracer_rectangle) menu3.add_command(label='elipse',command=self.tracer_ellipse) menu3.add_command(label='ligne',command=self.tracer_ligne) menu3.add_command(label='trait',command=self.tracer_trait) item10=Menu(menu3) item10.add_command(label='✩',font='verdana 25',command=self.tracer_etoile) item10.add_command(label='✧',font='verdana 25',command=self.tracer_etoile1) item10.add_command(label='✸',font='verdana 25',command=self.tracer_etoile2) menu3.add_cascade(label="étoiles",menu=item10) menu9=Menu(sysdemenu) sysdemenu.add_cascade(label='FIGURES',menu=menu9) menu9.configure(bg='light blue') menu9.configure(fg='red') item11=Menu(menu9) item11.add_command(label="♔" ,font='verdana 25',command=lambda:self.tracer_maison(0)) item11.add_command(label="♕" ,font='verdana 25',command=lambda:self.tracer_maison(1)) item11.add_command(label="♖" ,font='verdana 25',command=lambda:self.tracer_maison(2)) item11.add_command(label="♗" ,font='verdana 25',command=lambda:self.tracer_maison(3)) item11.add_command(label="♘" ,font='verdana 25',command=lambda:self.tracer_maison(4)) item11.add_command(label="♙" ,font='verdana 25',command=lambda:self.tracer_maison(5)) item11.add_command(label="♚" ,font='verdana 25',command=lambda:self.tracer_maison(6)) item11.add_command(label="♛" ,font='verdana 25',command=lambda:self.tracer_maison(7)) item11.add_command(label="♜" ,font='verdana 25',command=lambda:self.tracer_maison(8)) item11.add_command(label="♝" ,font='verdana 25',command=lambda:self.tracer_maison(9)) item11.add_command(label="♞" ,font='verdana 25',command=lambda:self.tracer_maison(10)) item11.add_command(label="♟" ,font='verdana 25',command=lambda:self.tracer_maison(11)) menu9.add_cascade(label="Jeux echecs",menu=item11) item12=Menu(menu9) item12.add_command(label="⚀" ,font='verdana 25',command=lambda:self.tracer_maison(12)) item12.add_command(label="⚁" ,font='verdana 25',command=lambda:self.tracer_maison(13)) item12.add_command(label="⚂" ,font='verdana 25',command=lambda:self.tracer_maison(14)) item12.add_command(label="⚃" ,font='verdana 25',command=lambda:self.tracer_maison(15)) item12.add_command(label="⚄" ,font='verdana 25',command=lambda:self.tracer_maison(16)) item12.add_command(label="⚅" ,font='verdana 25',command=lambda:self.tracer_maison(17)) menu9.add_cascade(label="Jeux de dés",menu=item12) item13=Menu(menu9) item13.add_command(label="⛳" ,font='verdana 25',command=lambda:self.tracer_maison(18)) item13.add_command(label="⛴" ,font='verdana 25',command=lambda:self.tracer_maison(19)) item13.add_command(label="⛵" ,font='verdana 25',command=lambda:self.tracer_maison(20)) item13.add_command(label="⛩" ,font='verdana 25',command=lambda:self.tracer_maison(21)) item13.add_command(label="⛪" ,font='verdana 25',command=lambda:self.tracer_maison(22)) item13.add_command(label="⛺" ,font='verdana 25',command=lambda:self.tracer_maison(23)) item13.add_command(label="⛰" ,font='verdana 25',command=lambda:self.tracer_maison(24)) item13.add_command(label="⛷" ,font='verdana 25',command=lambda:self.tracer_maison(25)) item13.add_command(label="⛹" ,font='verdana 25',command=lambda:self.tracer_maison(26)) item13.add_command(label="⛄" ,font='verdana 25',command=lambda:self.tracer_maison(27)) menu9.add_cascade(label="MAISONS",menu=item13) # addition du second item pour le second menu et leur sous-items associes menu4 = Menu(sysdemenu) # Creation du second menu sysdemenu.add_cascade(label='Epaisseur', menu=menu4) menu4.configure(bg='light green') menu4.add_command(compound='center',label='▁▁',command=self.epaisseur_trait3) menu4.add_command(label='▂▂',command=self.epaisseur_trait5) menu4.add_command(label='▃▃',command=self.epaisseur_trait8) menu4.add_command(label='▄▄',command=self.epaisseur_trait10) menu5 = Menu(sysdemenu) # Creation du second menu sysdemenu.add_cascade(label="Transparent",command=self.transparence) menu5.configure(bg='light blue') menu7 = Menu(sysdemenu) # Creation du second menu sysdemenu.add_cascade(label="Effacer",command=lambda :self.can.delete(ALL)) menu8 = Menu(sysdemenu) # Creation du second menu sysdemenu.add_cascade(label="Aide", menu=menu8) menu8.configure(bg='pink') menu8.add_command(label="Aide",command=self.Aide) fenetre.config(menu=sysdemenu) fenetre.bind("<Button1-Motion>",lambda event:self.tracer_dessin(event)) fenetre.bind("<Button-1>",lambda event:self.debut(event)) fenetre.bind("<Button1-ButtonRelease>",lambda event:self.sans_trace(event)) fenetre.bind("<Button-3>", lambda event:self.change(event)) self.can.tag_bind("OME","<Button3-Motion>", self.deplace) self.can.tag_bind("OME","<Button3-ButtonRelease>",self.relache) def sauvegarder(self): dimension=fenetre.geometry() larg='' haut='' cote='' dessus='' k=0 for i in range(int(len(dimension))): if dimension[i]=='x' or dimension[i]=='+': k=k+1 if dimension[i]!='x' or dimension[i]!='+': if k==0:arg=larg+dimension[i] if k==1: haut=haut+dimension[i] if k==2:cote=cote+dimension[i] if k==3: dessus=dessus+dimension[i] X,Y,L,H=fenetre.winfo_width()-1,fenetre.winfo_height(),int(cote),int(dessus) a,b,c,d=L+15,H+55,X+L,Y+H img2 = ImageGrab.grab((a,b,c,d)) largeur=fenetre.winfo_width() hauteur=fenetre.winfo_height() #img.save(fichier) # sauvegarde le fichier sur disque... fichier = asksaveasfilename(title="Enregistrer",filetypes=[('all files','.*')]) img2.save(fichier) fenetre=Tk() largeur=fenetre.winfo_screenwidth() hauteur=fenetre.winfo_screenheight() fichier1='' can=Canvas(fenetre,bg='white',width=largeur,height=hauteur) can.grid(row=0,column=0) l_widgets,nb=[],10 donnees=[fenetre,can,largeur,hauteur,l_widgets,nb] dessin=logiciel(donnees) dessin.run() fenetre.mainloop()