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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
| from tkinter import*
# creation dune fenêtre
fen1=Tk()
fen1.title('Draweasy')
def tabeffacer():
tableau.delete(ALL) # ça effacera tout ce qu'il y a dans le tableau
# creation de la barre de menu
menuDraweasy = Menu(fen1)
# creation du menu fichier
fichier = Menu(menuDraweasy)
menuDraweasy.add_cascade(label="Fichier",menu=fichier) # on crée une barre de menu
fichier.add_command(label="Quitter", command=fen1.destroy) # on ajoute une option au menu
# creation du menu effacer
effacer = Menu(menuDraweasy)
menuDraweasy.add_cascade(label="Effacer",menu=effacer)
effacer.add_command(label="Effacer tout", command=lambda : tabeffacer())
# afficher le menu
fen1.config(menu=menuDraweasy)
# creation des differents cadres
Tableau=LabelFrame(fen1)
Tableau.configure(text='',bd=2,relief='flat')
Tableau.grid(row=0,rowspan=3,column=2,padx=0,pady=0)
Couleur=LabelFrame(fen1)
Couleur.configure(text='Couleur du trait',font='Courier 10',bd=2,relief='flat')
Couleur.grid(row=0,column=1,padx=0,pady=0,sticky=W)
Style=LabelFrame(fen1)
Style.configure(text='Style de forme',font='Courier 10',bd=2,relief='flat')
Style.grid(row=1,column=1,padx=0,pady=0,sticky=W)
Epaisseur=LabelFrame(fen1)
Epaisseur.configure(text='Epaisseur du trait',font='Courier 10',bd=2,relief='flat')
Epaisseur.grid(row=2,column=1,padx=0,pady=0,sticky=W)
# creation des boutons du cadre Tableau
tableau=Canvas(Tableau)
tableau.configure(width=800,height=700,bg='white')
tableau.grid()
# creation des boutons du cadre Couleur
couleur=IntVar()
couleur.set(0)
palette=['#ffffff','#c0c0c0','#808080','#000000','#800000','#808000','#008000',
'#00ff00','#00ffff','#008080','#0000ff','#000080','#800080','#ff00ff',
'#c0000f','#ff0000','#ffcc00','#ffff00']
rcouleur={}
for c in range(0,18):
rcouleur[c]=Radiobutton(Couleur)
rcouleur[c].configure(variable=couleur,value=c,bg=palette[c],padx=8,indicatoron=0)
rcouleur[c].grid(sticky=W, padx=5)
# creation des boutons du cadre Epaisseur
epaisseur=IntVar()
epaisseur.set(1)
repaisseur={}
for e in range(1,9):
repaisseur[e]=Radiobutton(Epaisseur)
repaisseur[e].configure(variable=epaisseur,value=e,text=str(e),indicatoron=0)
repaisseur[e].grid()
# creation des boutons du cadre Style
style=StringVar()
style.set('droite')
bou1=Radiobutton(Style)
bou1.configure(variable=style,value='droite',text='droite',padx=12,indicatoron=0)
bou1.grid(sticky=W) # .grid permet de bien placer les cadres
bou2=Radiobutton(Style)
bou2.configure(variable=style,value='courbe',text='courbe',padx=10,indicatoron=0)
bou2.grid(sticky=W)
bou3=Radiobutton(Style)
bou3.configure(variable=style,value='oval',text='ovale',padx=13,indicatoron=0)
bou3.grid(sticky=W)
bou4=Radiobutton(Style)
bou4.configure(variable=style,value='rectangle',text='rectangle',padx=4,indicatoron=0)
bou4.grid(sticky=W)
# etat du bouton gauche de la souris au début
etatboutonsouris='haut'
# evenement associe au clic sur le tableau
def clic(event): # creation d'un objet "event" lorsque l'on appuie sur le tableau
global etatboutonsouris,x1,y1 # x1 et y1 sont les attributs qui contiennent les coordonnées
etatboutonsouris='bas'
x1=event.x # event.x et event.y contiennent les coordonnées cu clic
y1=event.y
tableau.bind('<ButtonPress-1>',clic) # .bind créer un évènement
# evenement associe au mouvement sur le tableau
def mouvement(event):
global etatboutonsouris,x,y
if (style.get()=='courbe' and etatboutonsouris=='bas'):
tableau.create_line(x,y,event.x,event.y,fill=palette[couleur.get()],width=epaisseur.get())
x=event.x
y=event.y
tableau.bind('<Motion>',mouvement)
# evenement associe au declic sur le tableau
def declic(event):
global etatboutonsouris,x2,y2
etatboutonsouris='haut'
x2=event.x
y2=event.y
if (style.get()=='droite'):
tableau.create_line(x1,y1,x2,y2,fill=palette[couleur.get()],width=epaisseur.get())
elif (style.get()=='oval'):
tableau.create_oval(x1,y1,x2,y2,fill=palette[couleur.get()],width=epaisseur.get())
elif (style.get()=='rectangle'):
tableau.create_rectangle(x1,y1,x2,y2,fill=palette[couleur.get()],width=epaisseur.get())
tableau.bind('<ButtonRelease-1>',declic)
# attente des evenements
fen1.mainloop() # démarre l'observateur d'évènements |
Partager