Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #======================================================
- # Cross Stitch Pattern Generator
- # cspg.py
- # Written by G.D. Walters
- # Created for Full Circle Magazine issues 85, 86, 87 & 88
- # FCM 86 - Part 55 - UI
- #======================================================
- from Tkinter import *
- import tkFileDialog
- import tkCommonDialog
- import tkMessageBox
- import ttk
- from PIL import Image,ImageTk,ImageOps
- import Pmw
- import apsw # Database Access
- import math # Math library
- import sys
- class XStitch:
- def __init__(self, master):
- self.picFormats = [
- ('JPEG / JFIF','*.jpg'),
- ('Portable Network Graphics','*.png'),
- ('CompuServer GIF','*.gif'),
- ('Windows Bitmap','*.bmp'),
- ('All File Types *.*','*.*'),
- ]
- self.openimage = PhotoImage(file='open.gif')
- self.DefaultImage =ImageTk.PhotoImage(self.Thumbnail("default.jpg",450,450))
- #-------------------------------------------
- # Global Definitions
- #-------------------------------------------
- # UI Required
- global OriginalFilename
- OriginalFilename = StringVar()
- global OriginalColorCount
- OriginalColorCount = StringVar()
- global OriginalSize
- OriginalSize = StringVar()
- global ComboStitch
- ComboStitch = IntVar()
- global ComboSize
- ComboSize = StringVar()
- global FabricWidth
- FabricWidth = DoubleVar()
- global FabricHeight
- FabricHeight = DoubleVar()
- global MaxColors
- MaxColors = IntVar()
- global BorderSize
- BorderSize = DoubleVar()
- global ProcessedColors
- ProcessedColors = StringVar()
- global ProcessedSize
- ProcessedSize = StringVar()
- global DmcColor
- DmcColor = StringVar()
- #-------------------------------------------
- global ShowGrid
- ShowGrid = True
- global ProcessedImage
- ProcessedImage = ""
- global GridImage
- GridImage = ""
- global backgroundColor1
- backgroundColor1 = (120,)*3
- global backgroundColor2
- backgroundColor2 = (0,)*3
- global ReadyToProcess
- ReadyToProcess = False
- #-------------------------
- self.OpenDB()
- self.MakeMenu(master)
- frm = self.BuildWidgets(master)
- self.PlaceWidgets(frm)
- #======================================================
- # BEGIN UI DEFINITION
- #======================================================
- def MakeMenu(self,master):
- menu = Menu(master)
- root.config(menu=menu)
- filemenu = Menu(menu, tearoff=0)
- process = Menu(menu,tearoff=0)
- help = Menu(menu,tearoff=0)
- menu.add_cascade(label="File", menu=filemenu)
- menu.add_cascade(label="Process",menu=process)
- menu.add_cascade(label="Help",menu=help)
- #-------------------------------------------
- # File Menu
- #-------------------------------------------
- filemenu.add_command(label="New")
- filemenu.add_command(label="Open", command=self.GetFileName)
- filemenu.add_command(label="Save", command=self.FileSave)
- filemenu.add_separator()
- filemenu.add_command(label="Exit", command=self.DoExit)
- #-------------------------------------------
- # Process Menu
- #-------------------------------------------
- process.add_command(label="All",command=self.Process)
- #-------------------------------------------
- # Help Menu
- #-------------------------------------------
- help.add_command(label="Help",command=self.ShowHelp)
- help.add_separator()
- help.add_command(label="About",command=self.ShowAbout)
- def BuildWidgets(self,master):
- self.frame = Frame(master,width=900,height=850)
- # ---------------- TOP FRAME ---------------------
- self.frm1 = Frame(self.frame,width=900,height=100,bd=4,relief=GROOVE)
- self.label1 = Label(self.frm1,text = "Original Filename: ")
- self.entFileName = Entry(self.frm1,width=50,textvariable=OriginalFilename)
- self.btnGetFN = Button(self.frm1,width=28,image=self.openimage,command=self.GetFileName)
- self.label2 = Label(self.frm1,text = "Original Colors: ")
- self.lblOriginalColorCount = Label(self.frm1,text="",width=10,textvariable=OriginalColorCount)
- self.label3 = Label(self.frm1,text = "Original Size: ")
- self.lblOriginalSize = Label(self.frm1,text="",width=10,textvariable=OriginalSize)
- # ---------------Middle Frame --------------------
- self.frm2 = Frame(self.frame,width=900,height=160,bd=4,relief=GROOVE)
- self.lbl4 = Label(self.frm2,text="Aida Stitch Size: ")
- self.lbl5 = Label(self.frm2,text="Aida Fabric Size: ")
- self.TCombobox1 = ttk.Combobox(self.frm2,textvariable=ComboStitch,width=8)
- self.TCombobox1.bind('<<ComboboxSelected>>', self.StitchSizeSelect)
- self.TCombobox1['values'] = (7,10,11,12,14,16,18,22)
- self.TCombobox2 = ttk.Combobox(self.frm2,textvariable=ComboSize,width = 8)
- self.TCombobox2.bind('<<ComboboxSelected>>',self.AidaSizeSelect)
- self.TCombobox2['values'] = ("12x18","15x18","30")
- self.lbl6 = Label(self.frm2,text="Max Colors: ")
- self.entMaxColors = Entry(self.frm2,textvariable=MaxColors,width=3)
- self.lbl7 = Label(self.frm2,text="Border Size: ")
- self.entBorderSize = Entry(self.frm2,textvariable=BorderSize,width = 8)
- self.frmLine = Frame(self.frm2,width=6,height=80,bd=3,relief="raised")
- self.lbl8 = Label(self.frm2,text=" Processed Image Colors: ")
- self.lbl9 = Label(self.frm2,text="Processed Image Stitch Count: ")
- self.lblProcessedColors=Label(self.frm2,width=10,textvariable=ProcessedColors,justify=LEFT)
- self.lblProcessedSize=Label(self.frm2,width=10,textvariable=ProcessedSize,justify=LEFT)
- self.btnDoIt = Button(self.frm2,text="Process",width=11,command = self.Process)
- self.btnShowGrid = Button(self.frm2,text="Hide Grid",width=11,command=self.ShowHideGrid)
- self.btnCreatePDF=Button(self.frm2,text="Create PDF",width=11,command=self.CreatePDF)
- ComboStitch.set(14)
- ComboSize.set("15x18")
- FabricWidth.set(15)
- FabricHeight.set(18)
- MaxColors.set(50)
- BorderSize.set(1.0)
- # --------------- Bottom Frame ------------------
- self.frm3 = Frame(self.frame,width=450,height=450,bd=4,relief=GROOVE)
- self.lblImageL = Label(self.frm3,image=self.DefaultImage,height=400,width=400,borderwidth=2,relief=GROOVE)
- self.lblImageR = Label(self.frm3,image=self.DefaultImage,height=400,width=400,borderwidth=2,relief=GROOVE)
- #---------------- Side Frame -------------------
- self.frm4 = Frame(self.frame,width = 300,height=580,bd=4,relief=GROOVE)
- # Create the ScrolledFrame.
- self.sf = Pmw.ScrolledFrame(self.frm4,
- labelpos = 'n', label_text = 'Processed Color List',
- usehullsize = 1,
- hull_width = 300,
- hull_height = 567,)
- return self.frame
- def PlaceWidgets(self,frame):
- frame.grid(column = 0, row = 0)
- # ---------------- TOP FRAME ---------------------
- self.frm1.grid(column=0,row=0,rowspan=2,sticky="new")
- self.label1.grid(column=0,row=0,sticky='w')
- self.entFileName.grid(column=1,row=0,sticky='w',columnspan = 5)
- self.btnGetFN.grid(column=7,row = 0,sticky='w')
- self.label2.grid(column=9,row=0,sticky='w',padx=10)
- self.lblOriginalColorCount.grid(column=10,row=0,sticky='w')
- self.label3.grid(column=9,row=1,sticky='w',padx=10,pady=5)
- self.lblOriginalSize.grid(column=10,row=1,sticky='w')
- # ---------------- MIDDLE FRAME ---------------------
- self.frm2.grid(column=0,row=2,rowspan=2,sticky="new")
- self.lbl4.grid(column=0,row=0,sticky="new",pady=5)
- self.lbl5.grid(column=0,row=1,sticky="new")
- self.TCombobox1.grid(column=1,row=0,sticky="new",pady=5)
- self.TCombobox2.grid(column=1,row=1,sticky="new")
- self.lbl6.grid(column=2,row = 0,sticky="new",padx=5,pady=5)
- self.entMaxColors.grid(column=3,row=0,sticky="new",pady=5)
- self.lbl7.grid(column=2,row=1,sticky='new',padx=5)
- self.entBorderSize.grid(column=3,row=1,sticky='new')
- self.frmLine.grid(column=4,row=0,rowspan=2,sticky='new',padx=15)
- self.lbl8.grid(column=5,row=0,sticky='new',pady=5)
- self.lbl9.grid(column=5,row=1,sticky='new')
- self.lblProcessedColors.grid(column=6,row=0,sticky='w')
- self.lblProcessedSize.grid(column=6,row=1,sticky='new')
- self.btnDoIt.grid(column=7,row=0,sticky='e',padx=5,pady = 5)
- self.btnShowGrid.grid(column=7,row=1,sticky='e',padx=5,pady = 5)
- self.btnCreatePDF.grid(column=8,row=0,rowspan=2,sticky='ew',padx=10)
- # ---------------- BOTTOM FRAME ---------------------
- self.frm3.grid(column=0,row=4,sticky="nsew")
- self.lblImageL.grid(column=0,row=0,sticky="w")
- self.lblImageR.grid(column=1,row=0,sticky="e")
- # ---------------- SIDE FRAME ---------------------
- self.frm4.grid(column=2,row=0,rowspan=12,sticky="new")
- self.sf.grid(column=0,row=1)
- self.sfFrame = self.sf.interior()
- self.lblch1 = Label(self.sfFrame,text=" Original")
- self.lblch2 = Label(self.sfFrame,text=" DMC")
- self.lblch3 = Label(self.sfFrame,text="Name/Number")
- self.lblch1.grid(column=0,row=0,sticky='w')
- self.lblch2.grid(column=1,row=0,sticky='w')
- self.lblch3.grid(column=2,row=0,sticky="w")
- #======================================================
- # END UI DEFINITION
- #======================================================
- def GetFileName(self):
- pass
- def FileSave(self):
- pass
- def ShowHelp(self):
- pass
- def ShowAbout(self):
- pass
- def DoExit(self):
- sys.exit()
- def OpenDB(self):
- pass
- def ShowHideGrid(self):
- pass
- def StitchSizeSelect(self,p):
- pass
- def AidaSizeSelect(self,p):
- pass
- def Process(self):
- pass
- def CreatePDF(self):
- pass
- #======================================================
- # Process Specific Functions
- #======================================================
- def Thumbnail(self,file,hsize,wsize):
- size = hsize,wsize
- extpos = file.rfind(".")
- outfile = file[:extpos] + ".thumbnail"
- im = Image.open(file)
- im.thumbnail(size)
- im.save(outfile,"JPEG")
- return im
- def OriginalInfo(self,file):
- pass
- def GetColorCount(self,file):
- pass
- def GetHW(self,file):
- pass
- def GetHW2(self,file):
- pass
- def GetColors(self,image):
- pass
- def Pixelate(self,im,pixelSize):
- pass
- def ReduceColours(self,ImageName):
- pass
- def MakeLines(self,im,pixelSize):
- pass
- def MakeLines2(self,im,pixelSize):
- pass
- def Rgb2Hex(self,rgb):
- pass
- def FillScrolledList(self,filename):
- pass
- def GetBestDistance(self,r1,g1,b1):
- # dist = math.sqrt(((r1-r2)**2) + ((g1-g2)**2) + ((b1-b2)**2))
- pass
- root = Tk()
- root.title("Cross Stitch Pattern Creator")
- test = XStitch(root)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement