#!/usr/bin/python
import sys
from random import randint
import Tkinter as tk
from Tkinter import *
from PIL import ImageTk, Image
import Image, ImageDraw
def result():
# captura de datos
width = int(entrywidth.get())
height = int(entryheight.get())
rule = int(entryrule.get())
arandom = int(entryarandom.get())
# Crea la primera fila al azar
if arandom:
first_row = [randint(0,1) for i in range(width)]
else:
first_row = [0]*width
first_row[width/2] = 1
results = [first_row]
regla = [(rule/pow(2,i)) % 2 for i in range(8)] # Convierte el numero de regla en una lista de salida
for i in range(height-1):
data = results[-1]
nueva = [regla[4*data[(j-1)%width]+2*data[j]+data[(j+1)%width]]
for j in range(width)]
results.append(nueva)
data = results # resultados obtenidos, en caso de hacer un print en consola son 1 y 0
fname="regla.png"
print "esta en render antes de generar la imagen"
img = Image.new("RGB",(width,height),(255,255,255))
draw = ImageDraw.Draw(img)
for y in range(height):
for x in range(width):
if data[y][x]: draw.point((x,y),(0,0,0))
img.save(fname,"PNG")
print "esta cosa ya genero la imagen"
def update():
data = entrywidth.get(), entryheight.get(), entryrule.get(), entrydorandom.get()
# Borra el texto que este en el campo de texto
text.delete(1.0, END)
# Muestra los nuevos valores de la regla
text.insert(INSERT, data)
# Borrar campo regla y al azar
entryrule.delete(0, END)
entryrandom.delete(0, END)
# abrir imagen generada
im = Image.open("regla.png")
im.show()
root = Tk()
# textos del GUI
twidth = "Ancho: "
theight = " Alto: "
trule = "Regla: "
tarandom = "Al azar: (Si = 1 | No = 0)"
# labels y textfields del GUI
labelwidth = Label(root, text=twidth)
entrywidth = Entry(root, width=25)
labelheight = Label(root, text=theight)
entryheight = Entry(root, width=25)
labelrule = Label(root, text=trule)
entryrule = Entry(root, width=25)
labelarandom = Label(root, text=trandom)
entryarandom = Entry(root, width=25)
button = Button(root, text="Generar", command=result)
button2 = Button(root, text="Mostrar", command=update)
text = Text(root, width=25, height=1)
# Acomdo del GUI
labelwidth.grid(row=1, column=1)
entrywidth.grid(row=1, column=2)
labelheight.grid(row=2, column=1)
entryheight.grid(row=2, column=2)
labelrule.grid(row=3, column=1)
entryrule.grid(row=3, column=2)
labelarandom.grid(row=4, column=1)
entryarandom.grid(row=4, column=2)
button.grid(row=5, column=2)
button2.grid(row=5, column=1)
text.grid(row=6, column=1)
# En que campo se empieza a escribir
entrywidth.focus()
root.title('Automata Celular')
#root.geometry("500x500") #tamaƱo de la ventana
root.mainloop()