summaryrefslogtreecommitdiffstats
path: root/Lib/lib-tk/tkFileDialog.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/lib-tk/tkFileDialog.py')
-rw-r--r--Lib/lib-tk/tkFileDialog.py106
1 files changed, 106 insertions, 0 deletions
diff --git a/Lib/lib-tk/tkFileDialog.py b/Lib/lib-tk/tkFileDialog.py
new file mode 100644
index 0000000..e0d5ae5
--- /dev/null
+++ b/Lib/lib-tk/tkFileDialog.py
@@ -0,0 +1,106 @@
+#
+# 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()