Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from tkinter import Menu
- import tkinter as tk
- from tkinter import messagebox as mBox
- from tkinter import filedialog
- from tkinter import ttk
- from PIL import Image, ImageTk, ImageFilter,ImageEnhance
- class PhotoEdit():
- def __init__(self):
- self.win=tk.Tk()
- self.win.title("Python GUI")
- self.addMenu()
- def addMenu(self):
- menuBar = Menu(self.win)
- self.win.config(menu=menuBar)
- fileMenu = Menu(menuBar)
- processMenu=Menu(menuBar)
- menuBar.add_cascade(label="File", menu=fileMenu)
- fileMenu.add_command(label="Open",command=self._openFile)
- fileMenu.add_command(label="Exit",command=self._quit)
- menuBar.add_cascade(label="Process", menu=processMenu)
- processMenu.add_command(label="Color",command=lambda:self._enhance_ctrl("COLOR"))
- processMenu.add_command(label="Contrast",command=lambda:self._enhance_ctrl("CONTRAST"))
- processMenu.add_command(label="Brigthness",command=lambda:self._enhance_ctrl("BRIGHTNESS"))
- processMenu.add_command(label="Filter",command=self._preview2)
- helpMenu=Menu(menuBar)
- helpMenu.add_command(label="About",command=self._msgBox)
- menuBar.add_cascade(label="Help",menu=helpMenu)
- def _quit(self):
- self.win.quit()
- self.win.destroy()
- exit()
- def _openFile(self):
- self.fileName=filedialog.askopenfilename(filetypes=[("jpeg files","*.jpg"),("png files","*.png")])
- print(self.fileName)
- self.image = Image.open(self.fileName)
- self._sendImage(self.image)
- def _sendPhoto(self):
- self.photo=ImageTk.PhotoImage(self.image)
- self.label=tk.Label(image=self.photo)
- self.label.grid(column=0, row=0,sticky=tk.NW)
- def _sendImage(self,image1):
- self.photo=ImageTk.PhotoImage(image1)
- self.label=tk.Label(image=self.photo)
- self.label.grid(column=0, row=0,sticky=tk.NW)
- def _blur(self):
- self.image=self.image.filter(ImageFilter.BLUR)
- self._sendImage(self.image)
- # def _blur_preview(self):
- # self.temp=self.image.filter(ImageFilter.BLUR)
- # self._sendImage(self.temp)
- # def _sharp_preview(self):
- # self.temp=self.image.filter(ImageFilter.SHARPEN)
- # self._sendImage(self.temp)
- def _save_changes(self):
- self.image=self.temp.copy()
- self.win2.destroy()
- def _cancel_changes(self):
- self._sendImage(self.image)
- # self.win2.quit()
- self.win2.destroy()
- def _preview2(self):
- FILTER_TYPES=["BLUR","SHARPEN","DETAIL"]
- self.win2=tk.Toplevel(self.win)
- self.win2.title("Process Image")
- self.f=tk.IntVar()
- self.f.set(-10)
- for i in range(len(FILTER_TYPES)):
- rad=tk.Radiobutton(self.win2,text=FILTER_TYPES[i].title(),variable=self.f,value=i,command=self._process)
- rad.grid(column=0,row=i,sticky=tk.W)
- buttOk=ttk.Button(self.win2, text="OK",command=self._save_changes)
- buttOk.grid(column=1,row=0)
- buttCancel=ttk.Button(self.win2, text="Cancel",command=self._cancel_changes)
- buttCancel.grid(column=1,row=1)
- def _enhance_ctrl(self,enhancerName):
- self.win2=tk.Toplevel(self.win)
- self.win2.title(enhancerName.title())
- db=tk.DoubleVar()
- if enhancerName=="BRIGHTNESS":
- scale=tk.Scale(self.win2,label=enhancerName.title(),from_=0,to=2.0,orient=tk.HORIZONTAL,variable=db,resolution=0.02,command=self._brightness)
- if enhancerName=="CONTRAST":
- scale=tk.Scale(self.win2,label=enhancerName.title(),from_=0,to=2.0,orient=tk.HORIZONTAL,variable=db,resolution=0.02,command=self._contrast)
- if enhancerName=="COLOR":
- scale=tk.Scale(self.win2,label=enhancerName.title(),from_=0,to=2.0,orient=tk.HORIZONTAL,variable=db,resolution=0.02,command=self._color)
- scale.grid(column=0,row=0)
- scale.set(1.0)
- buttOk=ttk.Button(self.win2, text="OK",command=self._save_changes)
- buttOk.grid(column=1,row=0)
- buttCancel=ttk.Button(self.win2, text="Cancel",command=self._cancel_changes)
- buttCancel.grid(column=1,row=1)
- # def _enhance(self,factor,enhancerName):
- # factor=float(factor)
- # print(factor)
- # if enhancerName=="BRIGHTNESS":
- # enhancer=ImageEnhance.Brightness(self.image)
- # self.temp=enhancer.enhance(factor)
- # self._sendImage(self.temp)
- def _contrast_control(self):
- self.win2=tk.Toplevel(self.win)
- self.win2.title("Contrast")
- db=tk.DoubleVar()
- scale=tk.Scale(self.win2,label="Contrast",from_=0,to=2.0,orient=tk.HORIZONTAL,variable=db,resolution=0.02,command=self._contrast)
- scale.grid(column=0,row=0)
- scale.set(1.0)
- buttOk=ttk.Button(self.win2, text="OK",command=self._save_changes)
- buttOk.grid(column=1,row=0)
- buttCancel=ttk.Button(self.win2, text="Cancel",command=self._cancel_changes)
- buttCancel.grid(column=1,row=1)
- def _contrast(self,factor):
- factor=float(factor)
- print(factor)
- enhancer=ImageEnhance.Contrast(self.image)
- self.temp=enhancer.enhance(factor)
- self._sendImage(self.temp)
- def _brightness(self,factor):
- factor=float(factor)
- print(factor)
- enhancer=ImageEnhance.Brightness(self.image)
- self.temp=enhancer.enhance(factor)
- self._sendImage(self.temp)
- def _color(self,factor):
- factor=float(factor)
- print(factor)
- enhancer=ImageEnhance.Color(self.image)
- self.temp=enhancer.enhance(factor)
- self._sendImage(self.temp)
- def _process(self):
- if self.f.get()==0:
- self.temp=self.image.filter(ImageFilter.BLUR)
- if self.f.get()==1:
- self.temp=self.image.filter(ImageFilter.SHARPEN)
- if self.f.get()==2:
- self.temp=self.image.filter(ImageFilter.DETAIL)
- self._sendImage(self.temp)
- # def _preview(self):
- # self.win2=tk.Toplevel(self.win)
- # self.win2.title("Process Image")
- # rad1 = tk.Radiobutton(self.win2, text="Blur", command=self._blur_preview)
- # rad1.grid(column=0, row=0, sticky=tk.W)
- # rad2 = tk.Radiobutton(self.win2, text="Sharpen", command=self._sharp_preview)
- # rad2.grid(column=1, row=0, c)
- # buttOk=ttk.Button(self.win2, text="OK",command=self._save_changes)
- # buttOk.grid(column=0,row=1)
- # buttCancel=ttk.Button(self.win2, text="Cancel",command=self._cancel_changes)
- # buttCancel.grid(column=1,row=1)
- # number = tk.StringVar()
- # numberChosen = ttk.Combobox(self.win2, width=12, textvariable=number)
- # numberChosen['values'] = ("Blur", "Sharpen", 4, 42, 100)
- # numberChosen.grid(column=0, row=0)
- # numberChosen.current(0)
- # self.temp=self.image.copy()
- # self.temp_photo=ImageTk.PhotoImage(self.temp)
- # self.label=tk.Label(self.win,image=self.temp_photo)
- # self.label.grid(column=0, row=0,sticky=tk.NW)
- def _msgBox(self):
- mBox.showinfo('Photojop:','A simple photoprocessing program')
- photoEditor=PhotoEdit()
- photoEditor.win.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment