##Menu for allowing the user to specify a file to save the game to from tkinter import * from ButtonCreator import * import BoardScreen import BoardSetup import ShowSpecies from SpeciesDatabase import * import pickle def run(world,event=None): """creates a new menu for saving the game""" root = Tk() save = SaveFrame(root,world) root.mainloop() class SaveFrame: def __init__(self, parent, world, width= 300, height = 200): self.parent = parent self.parent.geometry(str(width)+"x"+str(height)) self.frame = Frame(self.parent, width=width,\ height=height, bg="darkblue") self.world = world self.frame.pack() title = Label(self.frame, text="Save\n", fg="black") title.pack(fill=X, side=TOP) self.container = SaveContainer(self.parent, self.world) class SaveContainer: def __init__(self, parent, world, width = 1000, bg = "darkblue"): self.container = Frame(parent,width=width,bg=bg) self.container.pack(side = BOTTOM, fill = BOTH, expand = YES) self.parent = parent self.addEverything() self.world = world self.overwrite = False def addEverything(self): self.addSaveEntryBox() self.addSaveCancel() def addSaveEntryBox(self): '''builds and adds an entry field that can be used to enter a file name''' self.entryContainer = Frame(self.container, width= 25, bg="darkblue") self.entryLabel = Label(self.entryContainer, text ="File Name: ",\ bg= "darkblue", fg ="white") self.entryLabel.pack(fill=Y, side=LEFT) self.saveEntry = Entry(self.entryContainer) self.saveEntry.pack(fill=Y, side=LEFT) self.entryContainer.pack(pady = 50) def addSaveCancel(self): '''adds the save and cancel buttons to the bottom of the menu''' self.lowerButtonFrame = Frame(self.container, bg="darkblue") self.saveButton = ButtonCreator(self.lowerButtonFrame, "Save",\ self.saveClick, packOption = LEFT,\ width=10) self.cancelButton = ButtonCreator(self.lowerButtonFrame,"Cancel",\ self.cancelClick, packOption = RIGHT,\ width=10) self.lowerButtonFrame.pack(side =BOTTOM, fill=BOTH) def saveClick(self, event=None): self.path=str(self.saveEntry.get()) exists = True self.overwrite = False """Check if the file exists by opening for reading in a try block""" try : f = open(self.path, 'r') except IOError: exists = False if (exists): f.close() self.checkOverwrite() else: self.writeToFile(self.world, self.path) self.parent.destroy() def cancelClick(self, event=None): self.parent.destroy() def writeToFile(self, world, filename): '''Writes the board and database to 2 seperate files in the current directory using filename''' filename = filename f = open(filename, 'wb') ws = world.toWorldSpec() pickle.dump(ws, f) # filename = filename + "db" # f = open(filename, 'wb') # pickle.dump(world.specDatabase, f) def checkOverwrite(self): self.overWriteFrame = Frame(self.container, bg="darkblue") self.lowerButtonFrame.destroy() self.overwriteLabel = Label(self.overWriteFrame, text ="FILE EXISTS, OVERWRITE?",\ bg= "darkblue", fg ="red") self.overwriteLabel.pack(side = LEFT) self.noButton = ButtonCreator(self.overWriteFrame, "No",\ self.noClick, packOption = LEFT, width = 5) self.yesButton = ButtonCreator(self.overWriteFrame, "Yes",\ self.yesClick, packOption = LEFT) self.overWriteFrame.pack (side = BOTTOM, fill = BOTH) def yesClick(self, event = None): self.writeToFile(self.world, self.path) self.parent.destroy() self.overWriteFrame.destroy() def noClick(self, event = None): self.addSaveCancel() self.overWriteFrame.destroy()