SHARE
TWEET

cellular_automata.py

richigarza Oct 1st, 2012 117 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/python
  2. import sys
  3. from random import randint
  4. import Tkinter as tk
  5. from Tkinter import *
  6. from PIL import ImageTk, Image
  7. import Image, ImageDraw
  8.  
  9.  
  10. def result():
  11. # captura de datos
  12.     width = int(entrywidth.get())
  13.     height = int(entryheight.get())
  14.     rule = int(entryrule.get())
  15.     arandom = int(entryarandom.get())
  16.    
  17. # Crea la primera fila al azar
  18.     if arandom:
  19.         first_row = [randint(0,1) for i in range(width)]
  20.     else:
  21.         first_row = [0]*width
  22.         first_row[width/2] = 1
  23.     results = [first_row]
  24.  
  25.     regla = [(rule/pow(2,i)) % 2 for i in range(8)] # Convierte el numero de regla en una lista de salida
  26.  
  27.     for i in range(height-1):
  28.         data = results[-1]
  29.         nueva = [regla[4*data[(j-1)%width]+2*data[j]+data[(j+1)%width]]
  30.                for j in range(width)]
  31.         results.append(nueva)
  32.  
  33.     data = results # resultados obtenidos, en caso de hacer un print en consola son 1 y 0
  34.     fname="regla.png"
  35.     print "esta en render antes de generar la imagen"  
  36.     img = Image.new("RGB",(width,height),(255,255,255))
  37.     draw = ImageDraw.Draw(img)
  38.  
  39.     for y in range(height):
  40.         for x in range(width):
  41.             if data[y][x]: draw.point((x,y),(0,0,0))
  42.     img.save(fname,"PNG")
  43.     print "esta cosa ya genero la imagen"
  44.    
  45. def update():
  46.     data = entrywidth.get(), entryheight.get(), entryrule.get(), entrydorandom.get()
  47.     # Borra el texto que este en el campo de texto
  48.     text.delete(1.0, END)
  49.     # Muestra los nuevos valores de la regla
  50.     text.insert(INSERT, data)
  51.     # Borrar campo regla y al azar
  52.     entryrule.delete(0, END)
  53.     entryrandom.delete(0, END)
  54.     # abrir imagen generada
  55.     im = Image.open("regla.png")
  56.     im.show()
  57.  
  58. root = Tk()
  59. # textos del GUI
  60. twidth = "Ancho: "
  61. theight = " Alto: "
  62. trule = "Regla: "
  63. tarandom = "Al azar: (Si = 1 | No = 0)"
  64.  
  65. # labels y textfields del GUI
  66. labelwidth = Label(root, text=twidth)
  67. entrywidth = Entry(root, width=25)
  68. labelheight = Label(root, text=theight)
  69. entryheight = Entry(root, width=25)
  70. labelrule = Label(root, text=trule)
  71. entryrule = Entry(root, width=25)
  72. labelarandom = Label(root, text=trandom)
  73. entryarandom = Entry(root, width=25)
  74. button = Button(root, text="Generar", command=result)
  75. button2 = Button(root, text="Mostrar", command=update)
  76. text = Text(root, width=25, height=1)
  77.  
  78. # Acomdo del GUI
  79. labelwidth.grid(row=1, column=1)
  80. entrywidth.grid(row=1, column=2)
  81. labelheight.grid(row=2, column=1)
  82. entryheight.grid(row=2, column=2)
  83. labelrule.grid(row=3, column=1)
  84. entryrule.grid(row=3, column=2)
  85. labelarandom.grid(row=4, column=1)
  86. entryarandom.grid(row=4, column=2)
  87. button.grid(row=5, column=2)
  88. button2.grid(row=5, column=1)
  89. text.grid(row=6, column=1)
  90.  
  91. # En que campo se empieza a escribir
  92. entrywidth.focus()
  93.  
  94. root.title('Automata Celular')
  95. #root.geometry("500x500") #tamaƱo de la ventana
  96. root.mainloop()
RAW Paste Data
Pastebin PRO Summer Special!
Get 40% OFF on Pastebin PRO accounts!
Top