Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from ezTK import *
- import tkinter as tk
- from random import randint
- from math import *
- from PIL import ImageGrab
- # ------------------------------------------------------------------------------
- pas = 10
- stop = 10000
- # ------------------------------------------------------------------------------
- def flottant(chaine, defaut=0):
- "Convert character strings by floating"
- try:
- return float(chaine)
- except ValueError:
- return defaut
- # ------------------------------------------------------------------------------
- def stopper():
- "Click the stop button to stop the curve"
- if not win[1][0][1][1].stop:
- win[1][0][1][1].stop = True
- win.after(100, stopper)
- else:
- win[1][0][1][1].stop = False
- # ------------------------------------------------------------------------------
- def courbe(t):
- "Indication on the curve"
- #Default settings
- R = flottant(win[1][1][0][1][0].get(), 50 *2)
- r = flottant(win[1][1][0][1][1].get(), 24 *2)
- ro = flottant(win[1][1][0][1][2].get(), 100 *2)
- k = r / R
- l = ro / r
- H, W = int(win[0].winfo_width()), int(win[0].winfo_height())
- x = R*((1-k)*cos(t)+l*k*cos(((1-k)/k)*t))+ H//2
- y = R*((1-k)*sin(t)-l*k*sin(((1-k)/k)*t)) + W//2
- return x, y
- # ------------------------------------------------------------------------------
- def tracer(t, ancien):
- "fonction qui permet de tracer la courbe"
- if win[1][0][1][1].stop: return
- canvas = win[0]
- if t == 0 and win[1][0][2].var.get():
- canvas.delete("all")
- nouveau = courbe(t)
- width = flottant(win[1][1][1][2].get(), 1)
- canvas.create_line(ancien[0], ancien[1], *nouveau, fill=win[1][1][1][0][0]['text'],
- width=width)
- if t < stop:
- win.after(1, lambda t=t+pas, ancien=nouveau: tracer(t, ancien))
- # ------------------------------------------------------------------------------
- def random():
- " donner des valeurs aléatoire"
- R = randint(1, 800)
- r = randint(-800, 800)
- ro = randint(-800, 800)
- # efface les valeurs de défaut ou écrite pour mettre celles aléatoire
- win[1][1][0][1][0].delete(0, 'end')
- win[1][1][0][1][0].insert(0, str(R))
- win[1][1][0][1][1].delete(0, 'end')
- win[1][1][0][1][1].insert(0, str(r))
- win[1][1][0][1][2].delete(0, 'end')
- win[1][1][0][1][2].insert(0, str(ro))
- # ------------------------------------------------------------------------------
- def on_scale():
- """callback function for the 'MIN' and 'MAX' scales"""
- red_value = win[1][1][1][0][1]() #color values
- green_value= win[1][1][1][0][2]()
- blue_value = win[1][1][1][0][3]()
- c = "0123456789ABCDEF" #hexadecimal digits
- red_code = c[red_value//16]+ c[red_value%16]
- green_code = c[green_value//16]+c[green_value%16]
- blue_code = c[blue_value//16]+c[blue_value%16]
- color_label = win[1][1][1][0][0]
- color_label['text'] = "#" + red_code + green_code + blue_code
- color_label['fg'] = color_label['text']
- # ------------------------------------------------------------------------------
- def enregistre():
- canvas = win[0]
- spirograph = 'spiro.bmp'
- x = canvas.winfo_rootx()
- y = canvas.winfo_rooty()
- w = canvas.winfo_width()
- h = canvas.winfo_height()
- image = ImageGrab.grab((x+2, y+2, x+w-2, y+h-2))
- image.save(spirograph)
- # ------------------------------------------------------------------------------
- def switch():
- '''Change entre l'état affiché et invisible des widgets'''
- conteneur = win[1]
- if conteneur.displayed:
- conteneur.pack_forget()
- conteneur.displayed = False
- else:
- conteneur.pack()
- conteneur.displayed = True
- # ------------------------------------------------------------------------------
- def on_click(widget, mods, __):
- if type(widget) is Canvas:
- switch()
- # ------------------------------------------------------------------------------
- def main():
- """create the main window and pack the widgets"""
- font1 = 'Arial 14'
- global win
- H, W = 500, 500
- win = Win(title='SIROGRAPH', width=W, height=H,font=font1, op=2, click=on_click)
- canvas = Canvas(win, width=W, height=H, bg='black') # win[0]
- conteneur = Frame(win) # win[1]
- conteneur.displayed = True
- # ----------------------------------------------------------------------------
- fr1 = Frame(conteneur, grow=False) # win[1][0]
- rdm = Button(fr1, grow = False, text ='Random', relief= 'flat',
- command=random) # win[1][0][0]
- fr2 = Frame (fr1, grow = False,flow ='EE') # win[1][0][1]
- dessine = Button(fr2, grow=False, text='Dessine',
- command = lambda : win.after(1, tracer(0, courbe(0)))) # win[1][0][1][0]
- # Un bouton exécute une fonction qui ne prend pas de paramètres
- stop = Button(fr2, grow=False, text='Stop', command=stopper) # win[1][0][1][1]
- stop.stop = False
- efface = Button(fr2, grow=False, text='Efface', command = lambda: canvas.delete("all")) # win[1][0][1][2]
- save = Button(fr2, grow=False, text='Save', command = enregistre) # win[1][0][1][3]
- var = IntVar()
- button = Checkbutton(fr1, text= 'Efface auto', variable=var) # win[1][0][2]
- button.var = var
- # ----------------------------------------------------------------------------
- fr3 = Frame(conteneur) # win[1][1]
- fr4 = Frame(fr3, grow=False, fold = 3) # win[1][1][0]
- text1 = Label (fr4, text = 'R', border =0) # win[1][1][0][0][0]
- text2 = Label (fr4, text = 'r', border =0) # win[1][1][0][0][1]
- text3 = Label (fr4, text = 'ro', border =0) # win[1][1][0][0][2]
- entr1 = Entry (fr4, bg='white') # win[1][1][0][1][0]
- entr2 = Entry (fr4, bg ='white') # win[1][1][0][1][1]
- entr3 = Entry (fr4, bg = 'white') # win[1][1][0][1][2]
- fr5 = Frame(fr3, grow=False) # win[1][1][1]
- fr6= Frame(fr5, grow=False, relief='groove', op=0) # win[1][1][1][0]
- color_label = Label(fr6,width =9 ,grow=False, text='#000000', anchor='C',
- relief='solid') # win[1][1][1][0][0]
- red_scale = Scale(fr6, scale=(0, 255), show = False,troughcolor ='#FF0000',
- state=0, command=lambda: on_scale()) # win[1][1][1][0][1]
- green_scale = Scale(fr6, scale=(0, 255), show = False,troughcolor ='#00FF00',
- state=0, command=lambda: on_scale()) # win[1][1][1][0][2]
- blue_scale = Scale(fr6, scale=(0,255), show = False,troughcolor ='#0000FF',
- state=0, command=lambda: on_scale()) # win[1][1][1][0][3]
- text4 = Label (fr5, text = 'Epaisseur', border = 0.5) # win [1][1][1][1]
- entr4 = Entry(fr5, bg = 'white') # win[1][1][1][2]
- # ----------------------------------------------------------------------------
- # tracer(0, courbe(0))
- win.loop()
- # ==============================================================================
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement