107 lines
2.4 KiB
Python
107 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()
|