| 
									
										
										
										
											1997-07-19 20:02:36 +00:00
										 |  |  | # | 
					
						
							|  |  |  | # 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): | 
					
						
							| 
									
										
										
										
											1998-03-20 20:45:49 +00:00
										 |  |  |         if result: | 
					
						
							|  |  |  |             # keep directory and filename until next time | 
					
						
							| 
									
										
										
										
											1997-07-19 20:02:36 +00:00
										 |  |  |             import os | 
					
						
							| 
									
										
										
										
											1998-03-20 20:45:49 +00:00
										 |  |  |             path, file = os.path.split(result) | 
					
						
							|  |  |  |             self.options["initialdir"] = path | 
					
						
							|  |  |  |             self.options["initialfile"] = file | 
					
						
							| 
									
										
										
										
											1997-07-19 20:02:36 +00:00
										 |  |  |         self.filename = result # compatibility | 
					
						
							| 
									
										
										
										
											1998-03-20 20:45:49 +00:00
										 |  |  |         return result | 
					
						
							| 
									
										
										
										
											1997-07-19 20:02:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # 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() |