Accueil » Formes géométriques » dessin.py
Vues
  • État: publié

dessin.py

Document Actions

Cliquez ici pour obtenir le fichier

Taille 4.5 kB - Type du fichier text/x-python

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()