""" .. moduleauthor:: easygui developers and Stephen Raymond Ferg .. default-domain:: py .. highlight:: python Version |release| """ import os try: from . import utils as ut except (SystemError, ValueError, ImportError): import utils as ut try: import tkinter as tk # python 3 import tkinter.font as tk_Font except: import Tkinter as tk # python 2 import tkFont as tk_Font # ------------------------------------------------------------------- # # fileboxSetup # # ------------------------------------------------------------------- def fileboxSetup(default, filetypes): if not default: default = os.path.join(".", "*") initialdir, initialfile = os.path.split(default) if not initialdir: initialdir = "." if not initialfile: initialfile = "*" initialbase, initialext = os.path.splitext(initialfile) initialFileTypeObject = FileTypeObject(initialfile) allFileTypeObject = FileTypeObject("*") ALL_filetypes_was_specified = False if not filetypes: filetypes = list() filetypeObjects = list() for filemask in filetypes: fto = FileTypeObject(filemask) if fto.isAll(): ALL_filetypes_was_specified = True # remember this if fto == initialFileTypeObject: initialFileTypeObject.add(fto) # add fto to initialFileTypeObject else: filetypeObjects.append(fto) # ------------------------------------------------------------------ # make sure that the list of filetypes includes the ALL FILES type. # ------------------------------------------------------------------ if ALL_filetypes_was_specified: pass elif allFileTypeObject == initialFileTypeObject: pass else: filetypeObjects.insert(0, allFileTypeObject) # ------------------------------------------------------------------ # Make sure that the list includes the initialFileTypeObject # in the position in the list that will make it the default. # This changed between Python version 2.5 and 2.6 # ------------------------------------------------------------------ if len(filetypeObjects) == 0: filetypeObjects.append(initialFileTypeObject) if initialFileTypeObject in (filetypeObjects[0], filetypeObjects[-1]): pass else: if ut.runningPython27: filetypeObjects.append(initialFileTypeObject) else: filetypeObjects.insert(0, initialFileTypeObject) filetypes = [fto.toTuple() for fto in filetypeObjects] return initialbase, initialfile, initialdir, filetypes # Hotkeys if buttons: for button_name, button in buttons.items(): hotkey_pressed = event.keysym if event.keysym != event.char: # A special character hotkey_pressed = '<{}>'.format(event.keysym) if button['hotkey'] == hotkey_pressed: __replyButtonText = button_name boxRoot.quit() return print("Event not understood") # ------------------------------------------------------------------- # class FileTypeObject for use with fileopenbox # ------------------------------------------------------------------- class FileTypeObject: def __init__(self, filemask): if len(filemask) == 0: raise AssertionError('Filetype argument is empty.') self.masks = list() if isinstance(filemask, ut.basestring): # a str or unicode self.initializeFromString(filemask) elif isinstance(filemask, list): if len(filemask) < 2: raise AssertionError('Invalid filemask.\n' + 'List contains less than 2 members: "{}"'.format(filemask)) else: self.name = filemask[-1] self.masks = list(filemask[:-1]) else: raise AssertionError('Invalid filemask: "{}"'.format(filemask)) def __eq__(self, other): if self.name == other.name: return True return False def add(self, other): for mask in other.masks: if mask in self.masks: pass else: self.masks.append(mask) def toTuple(self): return self.name, tuple(self.masks) def isAll(self): if self.name == "All files": return True return False def initializeFromString(self, filemask): # remove everything except the extension from the filemask self.ext = os.path.splitext(filemask)[1] if self.ext == "": self.ext = ".*" if self.ext == ".": self.ext = ".*" self.name = self.getName() self.masks = ["*" + self.ext] def getName(self): e = self.ext file_types = {".*": "All", ".txt": "Text", ".py": "Python", ".pyc": "Python", ".xls": "Excel"} if e in file_types: return '{} files'.format(file_types[e]) if e.startswith("."): return '{} files'.format(e[1:].upper()) return '{} files'.format(e.upper())
Memory