## Instant Python# $Id: tkFileDialog.py 36560 2004年07月18日 06:16:08Z tim_one $## tk common file dialogues## this module provides interfaces to the native file dialogues# available in Tk 4.2 and newer, and the directory dialogue available# in Tk 8.3 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## - multiple: if true user may select more than one file## options for the directory chooser:## - initialdir, parent, title: see above## - mustexist: if true, user must pick an existing directory##from tkCommonDialog import Dialogclass _Dialog(Dialog):def _fixoptions(self):try:# make sure "filetypes" is a tupleself.options["filetypes"] = tuple(self.options["filetypes"])except KeyError:passdef _fixresult(self, widget, result):if result:# keep directory and filename until next timeimport os# convert Tcl path objects to stringstry:result = result.stringexcept AttributeError:# it already is a stringpasspath, file = os.path.split(result)self.options["initialdir"] = pathself.options["initialfile"] = fileself.filename = result # compatibilityreturn result## file dialogsclass Open(_Dialog):"Ask for a filename to open"command = "tk_getOpenFile"def _fixresult(self, widget, result):if isinstance(result, tuple):# multiple results:result = tuple([getattr(r, "string", r) for r in result])if result:import ospath, file = os.path.split(result[0])self.options["initialdir"] = path# don't set initialfile or filename, as we have multiple of thesereturn resultif not widget.tk.wantobjects() and "multiple" in self.options:# Need to split result explicitlyreturn self._fixresult(widget, widget.tk.splitlist(result))return _Dialog._fixresult(self, widget, result)class SaveAs(_Dialog):"Ask for a filename to save as"command = "tk_getSaveFile"# the directory dialog has its own _fix routines.class Directory(Dialog):"Ask for a directory"command = "tk_chooseDirectory"def _fixresult(self, widget, result):if result:# convert Tcl path objects to stringstry:result = result.stringexcept AttributeError:# it already is a stringpass# keep directory until next timeself.options["initialdir"] = resultself.directory = result # compatibilityreturn result## convenience stuffdef askopenfilename(**options):"Ask for a filename to open"return Open(**options).show()def asksaveasfilename(**options):"Ask for a filename to save as"return SaveAs(**options).show()def askopenfilenames(**options):"""Ask for multiple filenames to openReturns a list of filenames or empty list ifcancel button selected"""options["multiple"]=1return Open(**options).show()# FIXME: are the following perhaps a bit too convenient?def askopenfile(mode = "r", **options):"Ask for a filename to open, and returned the opened file"filename = Open(**options).show()if filename:return open(filename, mode)return Nonedef askopenfiles(mode = "r", **options):"""Ask for multiple filenames and return the open fileobjectsreturns a list of open file objects or an empty list ifcancel selected"""files = askopenfilenames(**options)if files:ofiles=[]for filename in files:ofiles.append(open(filename, mode))files=ofilesreturn filesdef asksaveasfile(mode = "w", **options):"Ask for a filename to save as, and returned the opened file"filename = SaveAs(**options).show()if filename:return open(filename, mode)return Nonedef askdirectory (**options):"Ask for a directory, and return the file name"return Directory(**options).show()# --------------------------------------------------------------------# test stuffif __name__ == "__main__":# Since the file name may contain non-ASCII characters, we need# to find an encoding that likely supports the file name, and# displays correctly on the terminal.# Start off with UTF-8enc = "utf-8"import sys# See whether CODESET is definedtry:import localelocale.setlocale(locale.LC_ALL,'')enc = locale.nl_langinfo(locale.CODESET)except (ImportError, AttributeError):pass# dialog for openening filesopenfilename=askopenfilename(filetypes=[("all files", "*")])try:fp=open(openfilename,"r")fp.close()except:print "Could not open File: "print sys.exc_info()[1]print "open", openfilename.encode(enc)# dialog for saving filessaveasfilename=asksaveasfilename()print "saveas", saveasfilename.encode(enc)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。