Advertisement
Guest User

Untitled

a guest
May 9th, 2017
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from ezTK import *
  2. import tkinter as tk
  3. from random import randint
  4. from math import *
  5. from PIL import ImageGrab
  6. # ------------------------------------------------------------------------------
  7. pas = 10
  8. stop = 10000
  9. # ------------------------------------------------------------------------------
  10. def flottant(chaine, defaut=0):
  11.     "Convert character strings by floating"
  12.     try:
  13.         return float(chaine)
  14.     except ValueError:
  15.         return defaut
  16.  
  17. # ------------------------------------------------------------------------------
  18. def stopper():
  19.     "Click the stop button to stop the curve"
  20.     if not win[1][0][1][1].stop:
  21.         win[1][0][1][1].stop = True
  22.         win.after(100, stopper)
  23.     else:
  24.         win[1][0][1][1].stop = False
  25.        
  26.    
  27. # ------------------------------------------------------------------------------
  28. def courbe(t):
  29.     "Indication on the curve"
  30.     #Default settings
  31.     R = flottant(win[1][1][0][1][0].get(), 50 *2)
  32.     r = flottant(win[1][1][0][1][1].get(), 24 *2)
  33.     ro = flottant(win[1][1][0][1][2].get(), 100 *2)
  34.     k = r / R
  35.     l = ro / r
  36.    
  37.     H, W = int(win[0].winfo_width()), int(win[0].winfo_height())
  38.     x = R*((1-k)*cos(t)+l*k*cos(((1-k)/k)*t))+ H//2
  39.     y = R*((1-k)*sin(t)-l*k*sin(((1-k)/k)*t)) + W//2
  40.     return x, y
  41.  
  42. # ------------------------------------------------------------------------------
  43. def tracer(t, ancien):
  44.     "fonction qui permet de tracer la courbe"
  45.     if win[1][0][1][1].stop: return
  46.     canvas = win[0]
  47.     if t == 0 and win[1][0][2].var.get():
  48.         canvas.delete("all")
  49.     nouveau = courbe(t)
  50.     width = flottant(win[1][1][1][2].get(), 1)
  51.     canvas.create_line(ancien[0], ancien[1], *nouveau, fill=win[1][1][1][0][0]['text'],
  52.                        width=width)
  53.     if t < stop:
  54.         win.after(1, lambda t=t+pas, ancien=nouveau: tracer(t, ancien))
  55.  
  56. # ------------------------------------------------------------------------------
  57. def random():
  58.     " donner des valeurs aléatoire"  
  59.     R = randint(1, 800)
  60.     r = randint(-800, 800)
  61.     ro = randint(-800, 800)
  62.     # efface les valeurs de défaut ou écrite pour mettre celles aléatoire
  63.     win[1][1][0][1][0].delete(0, 'end')
  64.     win[1][1][0][1][0].insert(0, str(R))
  65.     win[1][1][0][1][1].delete(0, 'end')
  66.     win[1][1][0][1][1].insert(0, str(r))
  67.     win[1][1][0][1][2].delete(0, 'end')
  68.     win[1][1][0][1][2].insert(0, str(ro))
  69.      
  70. # ------------------------------------------------------------------------------
  71. def on_scale():
  72.   """callback function for the 'MIN' and 'MAX' scales"""
  73.   red_value = win[1][1][1][0][1]() #color values
  74.   green_value= win[1][1][1][0][2]()
  75.   blue_value = win[1][1][1][0][3]()
  76.   c = "0123456789ABCDEF" #hexadecimal digits
  77.  
  78.   red_code = c[red_value//16]+ c[red_value%16]
  79.   green_code = c[green_value//16]+c[green_value%16]
  80.   blue_code = c[blue_value//16]+c[blue_value%16]
  81.   color_label = win[1][1][1][0][0]
  82.   color_label['text'] = "#" + red_code + green_code + blue_code
  83.   color_label['fg'] = color_label['text']
  84. # ------------------------------------------------------------------------------
  85. def enregistre():
  86.   canvas = win[0]
  87.   spirograph = 'spiro.bmp'
  88.   x = canvas.winfo_rootx()
  89.   y = canvas.winfo_rooty()
  90.   w = canvas.winfo_width()
  91.   h = canvas.winfo_height()
  92.   image = ImageGrab.grab((x+2, y+2, x+w-2, y+h-2))
  93.   image.save(spirograph)
  94. # ------------------------------------------------------------------------------
  95. def switch():
  96.     '''Change entre l'état affiché et invisible des widgets'''
  97.    conteneur = win[1]
  98.    if conteneur.displayed:
  99.        conteneur.pack_forget()
  100.        conteneur.displayed = False
  101.    else:
  102.        conteneur.pack()
  103.        conteneur.displayed = True
  104. # ------------------------------------------------------------------------------
  105. def on_click(widget, mods, __):
  106.    if type(widget) is Canvas:
  107.        switch()
  108. # ------------------------------------------------------------------------------
  109. def main():
  110.  """create the main window and pack the widgets"""
  111.  font1 = 'Arial 14'
  112.  global win
  113.  H, W = 500, 500
  114.  win = Win(title='SIROGRAPH', width=W, height=H,font=font1, op=2, click=on_click)
  115.  canvas = Canvas(win, width=W, height=H, bg='black') # win[0]
  116.  conteneur = Frame(win) # win[1]
  117.  conteneur.displayed = True
  118.  
  119.  # ----------------------------------------------------------------------------
  120.  fr1 = Frame(conteneur, grow=False) # win[1][0]
  121.  rdm = Button(fr1, grow = False, text ='Random', relief= 'flat',
  122.                  command=random) # win[1][0][0]
  123.  fr2 = Frame (fr1, grow = False,flow ='EE') # win[1][0][1]
  124.  dessine = Button(fr2, grow=False, text='Dessine',
  125.                   command = lambda : win.after(1, tracer(0, courbe(0)))) # win[1][0][1][0]
  126.  # Un bouton exécute une fonction qui ne prend pas de paramètres
  127.  stop = Button(fr2, grow=False, text='Stop', command=stopper) # win[1][0][1][1]
  128.  stop.stop = False
  129.  efface = Button(fr2, grow=False, text='Efface', command = lambda: canvas.delete("all")) # win[1][0][1][2]
  130.  save = Button(fr2, grow=False, text='Save', command = enregistre) # win[1][0][1][3]
  131.  var = IntVar()
  132.  button = Checkbutton(fr1, text= 'Efface auto', variable=var) # win[1][0][2]
  133.  button.var = var
  134.  # ----------------------------------------------------------------------------
  135.  fr3 = Frame(conteneur) # win[1][1]
  136.  fr4 = Frame(fr3, grow=False, fold = 3) # win[1][1][0]
  137.  text1 = Label (fr4, text = 'R', border =0) # win[1][1][0][0][0]
  138.  text2 = Label (fr4, text = 'r', border =0) # win[1][1][0][0][1]
  139.  text3 = Label (fr4, text = 'ro', border =0) # win[1][1][0][0][2]
  140.  entr1 = Entry (fr4, bg='white') # win[1][1][0][1][0]
  141.  entr2 = Entry (fr4, bg ='white') # win[1][1][0][1][1]
  142.  entr3 = Entry (fr4, bg = 'white') # win[1][1][0][1][2]
  143.  
  144.  fr5 = Frame(fr3, grow=False) # win[1][1][1]
  145.  fr6= Frame(fr5, grow=False, relief='groove', op=0) # win[1][1][1][0]
  146.  color_label = Label(fr6,width =9 ,grow=False, text='#000000', anchor='C',
  147.                       relief='solid') # win[1][1][1][0][0]
  148.   red_scale = Scale(fr6, scale=(0, 255), show = False,troughcolor ='#FF0000',
  149.                     state=0, command=lambda: on_scale()) # win[1][1][1][0][1]
  150.   green_scale = Scale(fr6, scale=(0, 255), show = False,troughcolor ='#00FF00',
  151.                       state=0, command=lambda: on_scale()) # win[1][1][1][0][2]
  152.   blue_scale = Scale(fr6, scale=(0,255), show = False,troughcolor ='#0000FF',
  153.                      state=0, command=lambda: on_scale()) # win[1][1][1][0][3]
  154.   text4 = Label (fr5, text = 'Epaisseur', border = 0.5) # win [1][1][1][1]
  155.   entr4 = Entry(fr5, bg = 'white') # win[1][1][1][2]
  156.   # ----------------------------------------------------------------------------
  157.   # tracer(0, courbe(0))
  158.   win.loop()
  159. # ==============================================================================
  160. if __name__ == "__main__":
  161.   main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement