Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement