mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			106 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#
 | 
						|
# Instant Python
 | 
						|
# $Id$
 | 
						|
#
 | 
						|
# tk common file dialogues
 | 
						|
#
 | 
						|
# this module provides interfaces to the native file dialogues
 | 
						|
# available in Tk 4.2 and newer.
 | 
						|
#
 | 
						|
# written by Fredrik Lundh, May 1997.
 | 
						|
#
 | 
						|
 | 
						|
#
 | 
						|
# options (all have default values):
 | 
						|
#
 | 
						|
# - defaultextension: added to filename if not explicitly given
 | 
						|
#
 | 
						|
# - filetypes: sequence of (label, pattern) tuples.  the same pattern
 | 
						|
#   may occur with several patterns.  use "*" as pattern to indicate
 | 
						|
#   all files.
 | 
						|
#
 | 
						|
# - initialdir: initial directory.  preserved by dialog instance.
 | 
						|
#
 | 
						|
# - initialfile: initial file (ignored by the open dialog).  preserved
 | 
						|
#   by dialog instance.
 | 
						|
#
 | 
						|
# - parent: which window to place the dialog on top of
 | 
						|
#
 | 
						|
# - title: dialog title
 | 
						|
#
 | 
						|
 | 
						|
from tkCommonDialog import Dialog
 | 
						|
 | 
						|
class _Dialog(Dialog):
 | 
						|
 | 
						|
    def _fixoptions(self):
 | 
						|
        try:
 | 
						|
            # make sure "filetypes" is a tuple
 | 
						|
            self.options["filetypes"] = tuple(self.options["filetypes"])
 | 
						|
        except KeyError:
 | 
						|
            pass
 | 
						|
 | 
						|
    def _fixresult(self, widget, result):
 | 
						|
	if result:
 | 
						|
	    # keep directory and filename until next time
 | 
						|
            import os
 | 
						|
	    path, file = os.path.split(result)
 | 
						|
	    self.options["initialdir"] = path
 | 
						|
	    self.options["initialfile"] = file
 | 
						|
        self.filename = result # compatibility
 | 
						|
	return result
 | 
						|
 | 
						|
 | 
						|
#
 | 
						|
# file dialogs
 | 
						|
 | 
						|
class Open(_Dialog):
 | 
						|
    "Ask for a filename to open"
 | 
						|
 | 
						|
    command = "tk_getOpenFile"
 | 
						|
 | 
						|
class SaveAs(_Dialog):
 | 
						|
    "Ask for a filename to save as"
 | 
						|
 | 
						|
    command = "tk_getSaveFile"
 | 
						|
 | 
						|
 | 
						|
#
 | 
						|
# convenience stuff
 | 
						|
 | 
						|
def askopenfilename(**options):
 | 
						|
    "Ask for a filename to open"
 | 
						|
 | 
						|
    return apply(Open, (), options).show()
 | 
						|
 | 
						|
def asksaveasfilename(**options):
 | 
						|
    "Ask for a filename to save as"
 | 
						|
 | 
						|
    return apply(SaveAs, (), options).show()
 | 
						|
 | 
						|
# FIXME: are the following two perhaps a bit too convenient?
 | 
						|
 | 
						|
def askopenfile(mode = "r", **options):
 | 
						|
    "Ask for a filename to open, and returned the opened file"
 | 
						|
 | 
						|
    filename = apply(Open, (), options).show()
 | 
						|
    if filename:
 | 
						|
        return open(filename, mode)
 | 
						|
    return None
 | 
						|
 | 
						|
def asksaveasfile(mode = "w", **options):
 | 
						|
    "Ask for a filename to save as, and returned the opened file"
 | 
						|
 | 
						|
    filename = apply(SaveAs, (), options).show()
 | 
						|
    if filename:
 | 
						|
        return open(filename, mode)
 | 
						|
    return None
 | 
						|
 | 
						|
 | 
						|
# --------------------------------------------------------------------
 | 
						|
# test stuff
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
 | 
						|
    print "open", askopenfilename(filetypes=[("all filez", "*")])
 | 
						|
    print "saveas", asksaveasfilename()
 |