from Tkinter import * import tkFileDialog import Image import ImageTk import sys import mandel # Gen Kazama # ID 260181388 # CS206 Assignment 3 # This was tested on: lab7-20 class GUI: def __init__(self, master): frame=Frame(master) frame.pack() # Left side frame (choices) left=Frame(frame,bd=2) # Filename self.filename = StringVar() self.filename_lbl = Label(left,text='Filename') self.filename_lbl.pack(side=TOP) self.filename_entry = Entry(left,textvariable=self.filename) self.filename_entry.configure(bg='white') self.filename_entry.pack() # Browse self.browse = Button(left, text='Browse',command = self.browseSave) self.browse.pack() # Width self.width = StringVar() self.width_lbl = Label(left,text = 'Width') self.width_lbl.pack(side=TOP) self.width_entry = Entry(left,textvariable=self.width) self.width_entry.configure(bg='white') self.width_entry.pack() # Height self.height = StringVar() self.height_lbl = Label(left,text='Height') self.height_lbl.pack(side=TOP) self.height_entry = Entry(left, textvariable = self.height) self.height_entry.configure(bg='white') self.height_entry.pack() # Offset X self.offx = StringVar() self.offx_lbl = Label(left,text = 'Offset X') self.offx_lbl.pack(side=TOP) self.offx_entry = Entry(left,textvariable=self.offx) self.offx_entry.configure(bg='white') self.offx_entry.pack() # Offset Y self.offy = StringVar() self.offy_lbl = Label(left,text = 'Offset Y') self.offy_lbl.pack(side=TOP) self.offy_entry = Entry(left,textvariable=self.offy) self.offy_entry.configure(bg='white') self.offy_entry.pack() # Scale self.scale = StringVar() self.scale_lbl = Label(left,text = 'Scale') self.scale_lbl.pack(side=TOP) self.scale_entry = Entry(left,textvariable=self.scale) self.scale_entry.configure(bg='white') self.scale_entry.pack() # Radiobuttons for Fractal choice self.frac=IntVar() Radiobutton(left,text="Mandelbrot",variable=self.frac,value=1).pack(anchor=W) Radiobutton(left,text="Newton Fractal",variable=self.frac,value=2).pack(anchor=W) Radiobutton(left,text="Burning Ship",variable=self.frac,value=3).pack(anchor=W) Radiobutton(left,text="Julia Set",variable=self.frac,value=4).pack(anchor=W) Radiobutton(left,text="Star Fractal",variable=self.frac,value=5).pack(anchor=W) left.pack(fill=X,pady=5,side=LEFT) self.colors=Frame(frame, relief='groove') # Radiobuttons for Color choice self.v=IntVar() Radiobutton(self.colors,text="Grayscale",variable=self.v,value=1).pack(anchor=W) Radiobutton(self.colors,text="Color",variable=self.v,value=2).pack(anchor=W) self.v.set(1) self.frac.set(1) # Foreground Color self.fg_lbl=Label(self.colors, text='Foreground Color') self.fg_lbl.pack(side=TOP) # R,G and B for foreground self.fgr = StringVar() self.fgr_lbl = Label(self.colors, text = 'R(0-255)') self.fgr_lbl.pack(side=TOP) self.fgr_entry = Entry(self.colors, textvariable = self.fgr) self.fgr_entry.configure(bg='red') self.fgr_entry.pack(side=TOP) self.fgg = StringVar() self.fgg_lbl = Label(self.colors, text = 'G(0-255)') self.fgg_lbl.pack(side=TOP) self.fgg_entry = Entry(self.colors, textvariable = self.fgg) self.fgg_entry.configure(bg='green') self.fgg_entry.pack(side=TOP) self.fgb = StringVar() self.fgb_lbl = Label(self.colors, text = 'B(0-255)') self.fgb_lbl.pack(side=TOP) self.fgb_entry = Entry(self.colors, textvariable = self.fgb) self.fgb_entry.configure(bg='blue') self.fgb_entry.pack(side=TOP) # Background Color self.bg_lbl=Label(self.colors, text='Background Color') self.bg_lbl.pack(side=TOP) # R,G and B for background self.bgr = StringVar() self.bgr_lbl = Label(self.colors, text = 'R(0-255)') self.bgr_lbl.pack(side=TOP) self.bgr_entry = Entry(self.colors, textvariable = self.bgr) self.bgr_entry.configure(bg='red') self.bgr_entry.pack(side=TOP) self.bgg = StringVar() self.bgg_lbl = Label(self.colors, text = 'G(0-255)') self.bgg_lbl.pack(side=TOP) self.bgg_entry = Entry(self.colors, textvariable = self.bgg) self.bgg_entry.configure(bg='green') self.bgg_entry.pack(side=TOP) self.bgb = StringVar() self.bgb_lbl = Label(self.colors, text = 'B(0-255)') self.bgb_lbl.pack(side=TOP) self.bgb_entry = Entry(self.colors, textvariable = self.bgb) self.bgb_entry.configure(bg='blue') self.bgb_entry.pack(side=TOP) # Execute Button self.exb = Button(self.colors, text='Execute',command = self.ex) self.exb.pack() # Quit Button self.quitb = Button(self.colors,text='Quit', command=self.quit) self.quitb.pack() self.colors.pack(fill=X, pady=5,side=RIGHT) # Drawing self.picturef=Frame(frame,bd=2, relief='groove') self.picture = Canvas(self.picturef, height=600, width=800, bg='white') self.picture.pack(side=RIGHT) self.picturef.pack(fill = X,pady=5, side=RIGHT,before=self.colors) def browseSave(self): myFormats = [ ('Windows Bitmap','*.bmp'), ('Portable Network Graphics','*.png'), ('JPEG / JFIF','*.jpg'), ('CompuServer GIF','*.gif')] self.filename.set(tkFileDialog.asksaveasfilename(parent=root,filetypes=myFormats ,title="Save the image as...")) def ex(self): #Gets the values from the GUI self.w=int(self.width.get(),base=10); self.h=int(self.height.get(),base=10); self.ox=int(self.offx.get(),base=10); self.oy=int(self.offy.get(),base=10); self.s=float(self.scale.get()); #Gets the foreground and background colors self.br=0 self.bg=0 self.bb=0 self.fr=255 self.fg=255 self.fb=255 if self.v.get()==2: self.br=int(self.bgr.get(),base=10)%255; self.bg=int(self.bgg.get(),base=10)%255; self.bb=int(self.bgb.get(),base=10)%255; self.fr=int(self.fgr.get(),base=10)%255; self.fg=int(self.fgg.get(),base=10)%255; self.fb=int(self.fgb.get(),base=10)%255; self.xcor=0; self.ycor=0; self.sizeImage=(self.w,self.h) img=Image.new("RGB",self.sizeImage) putpixel=img.im.putpixel #Draws for every x from 0 to width and every y from 0 to height for self.xcor in range(self.sizeImage[0]): for self.ycor in range(self.sizeImage[1]): # Draw the Mandelbrot Fractal if self.frac.get()==1: #Parsed by C as x,y,width,height,offset x,offsety, scale returnValue=mandel.drawMandel(self.xcor+self.ox, self.ycor-self.oy, self.w,self.h, self.ox,self.oy, self.s, self.br,self.bg,self.bb, self.fr,self.fg,self.fb) # Draw the Newton Fractal elif self.frac.get()==2: returnValue=mandel.drawNewton(self.xcor+self.ox, self.ycor-self.oy, self.w,self.h, self.ox,self.oy, self.s, self.br,self.bg,self.bb, self.fr,self.fg,self.fb) # Draw the Burning Ship Fractal elif self.frac.get()==3: returnValue=mandel.drawShip(self.xcor+self.ox, self.ycor-self.oy, self.w,self.h, self.ox,self.oy, self.s, self.br,self.bg,self.bb, self.fr,self.fg,self.fb) # Draw the Julia Set elif self.frac.get()==4: returnValue=mandel.drawJulia(self.xcor+self.ox, self.ycor-self.oy, self.w,self.h, self.ox,self.oy, self.s, self.br,self.bg,self.bb, self.fr,self.fg,self.fb) # Draw the Star Fractal elif self.frac.get()==5: returnValue=mandel.drawStar(self.xcor+self.ox, self.ycor-self.oy, self.w,self.h, self.ox,self.oy, self.s, self.br,self.bg,self.bb, self.fr,self.fg,self.fb) self.x=returnValue[1] self.y=returnValue[2] self.r=returnValue[3] self.g=returnValue[4] self.b=returnValue[5] #Draws the pixel (a line spanning one pixel) putpixel((self.x,self.y),(self.r,self.g,self.b)) # Save the image and then print the image onto the canvas img.save(self.filename.get(),"PNG") self.tkImg=ImageTk.PhotoImage(img) self.picture.delete("all"); self.picture.create_image(400-(self.w/2),300-(self.h/2), image=self.tkImg,anchor='nw') root.update() def quit(self): import sys sys.exit() root=Tk() widgets=GUI(root) root.title("Mandel GUI") root.mainloop()