Vues
- État: publié
dessin.py
Cliquez ici pour obtenir le fichier
Contenu du fichier
#-*- coding: utf_8 -*-
#! /usr/local/bin/python
class AppCercle:
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.canvas = Canvas(frame, height=800, width=800, bg='dark grey')
self.canvas.pack(side=RIGHT)
self.buttonCercle = Button(frame, text='Cercle', width = 10, command=self.createCercle)
self.buttonCercle.pack()
self.buttonRectangle = Button(frame, text='Rectangle', width = 10, command=self.createRectangle)
self.buttonRectangle.pack()
self.buttonPolygon = Button(frame, text='Polygone', width = 10, command=self.createPolygon)
self.buttonPolygon.pack()
self.buttonMainlevee = Button(frame, text='Crayon', width = 10, command=self.mainlevee)
self.buttonMainlevee.pack()
self.canvas.bind("<Motion>", self.motion)
self.canvas.bind("<ButtonPress-1>", self.b1bas)
self.canvas.bind("<ButtonRelease-1>", self.b1haut)
self.canvas.bind("<Button-4>", self.changeCanvasColor)
self.canvas.bind("<Button-5>", self.changeCanvasColor)
self.mainlevee = False
def createCercle(self):
"""Crée un cercle aléatoire."""
couleur = self.randomColor()
x,y,d = int(random()*720), int(random()*720), int(random()*40)+1
oval = self.canvas.create_oval(x-d, y-d, x+d, y+d, fill = couleur)
self.makeBind(oval)
def createRectangle(self):
"""Crée un rectangle aléatoire."""
couleur = self.randomColor()
a, b = randint(0,740), randint(0,740)
c, d = a+randint(0,60), b+randint(0,60)
rectangle = self.canvas.create_rectangle(a, b, c, d, fill= couleur)
self.makeBind(rectangle)
def createPolygon(self):
"""Crée un polygone aléatoire"""
couleur = self.randomColor()
outline = [ (randint(0,500), randint(0,500)) for _ in range(randint(0,6))]
try:
polygone = self.canvas.create_polygon(outline, fill= couleur)
except IndexError:
print 'Oups !'
try:
self.makeBind(polygone)
except:
print 'Zut alors !'
def makeBind(self, name):
"""Ajoute les évèments sur les formes."""
self.canvas.tag_bind(name, "<Button-1>", self.frontPlan)
self.canvas.tag_bind(name, "<Button-3>", self.backPlan)
self.canvas.tag_bind(name, "<B1-Motion>", self.move)
self.canvas.tag_bind(name, "<Button-2>", self.delete)
self.canvas.tag_bind(name, "<Button-4>", self.changeColor)
self.canvas.tag_bind(name, "<Button-5>", self.changeColor)
def frontPlan(self, event):
"""Met la figure en avant plan."""
self.shape = self.canvas.find_withtag(CURRENT)
self.canvas.tag_raise(self.shape)
self.depx = event.x
self.depy = event.y
def backPlan(self, event):
"""Met la figure en arrière plan."""
self.canvas.tag_lower(self.canvas.find_withtag(CURRENT))
def move(self, event):
"""Déplace la figure"""
dx = event.x - self.depx
dy = event.y - self.depy
self.canvas.move(self.shape, dx, dy)
self.depx = event.x
self.depy = event.y
def mainlevee(self):
"""
Main levée ou pas.
"""
if self.mainlevee == True:
self.mainlevee = False
self.buttonMainlevee.configure(relief = RAISED)
else:
self.mainlevee = True
self.buttonMainlevee.configure(relief = SUNKEN)
def b1bas(self, event):
"""
On trace quand le bouton est enfoncé.
"""
global b1
b1 = "bas"
def b1haut(self, event):
"""
Bouton laché, nouvelle ligne.
"""
global b1, prev
b1 = "haut"
prev = (None, None)
def motion(self, event):
"""
Trace des lignes à main levée.
"""
if b1 == "bas" and self.mainlevee:
global prev
if prev != (None,None):
xprev,yprev=prev
event.widget.create_line(xprev, yprev, event.x, event.y, smooth = TRUE)
prev = (event.x,event.y)
def delete(self, event):
"""
Efface la figure.
"""
current = self.shape = self.canvas.find_withtag(CURRENT)
self.canvas.delete(current)
def changeCanvasColor(self, event):
"""
Change la couleur du Canvas.
"""
if not self.canvas.find_withtag(CURRENT):
couleur = self.randomColor()
self.canvas.configure(bg = couleur)
def changeColor(self, event):
"""
Change la couleur d'une figure.
"""
couleur = self.randomColor()
current = self.shape = self.canvas.find_withtag(CURRENT)
self.canvas.itemconfigure(current, fill = couleur)
def randomColor(self):
"""Renvoie une couleur aléatoire."""
c = int(random()*8)
return palette[c]
if __name__ == '__main__':
from Tkinter import *
from random import *
palette = ['purple','cyan','maroon','green','red','blue','orange','yellow', 'dark grey', 'grey']
coul = "dark green"
b1 = "haut"
prev = (None, None)
root = Tk()
app = AppCercle(root)
root.title('Dessin')
root.minsize(width=250,height=250)
root.resizable(height=False, width=False)
root.mainloop()







