| # |
| # 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() |