2011-08-17 17 views
6

Estoy tratando de encontrar una función de python para presentar un cuadro de diálogo 'guardar archivo como' que devuelve un nombre de archivo como una cadena.cómo usar el diálogo Guardar como de Python

Encontré rápidamente el módulo tkFileDialog, solo para darme cuenta de que su función asksaveasfilename arroja una excepción si el archivo ingresado aún no existe, que no es el comportamiento que estoy buscando.

Creo que la respuesta que estoy buscando está en el módulo Python FileDialog, pero mi mejor opción es que es el método get_selection de la clase SaveFileDialog. A continuación, se puede ver mi torpeza acerca en modo interactivo tratando de averiguar uso:

>>> FileDialog.SaveFileDialog.get_selection() 
Traceback (most recent call last): 
    File "<interactive input>", line 1, in <module> 
TypeError: unbound method get_selection() must be called with SaveFileDialog instance as first argument (got nothing instead) 
>>> x = FileDialog.SaveFileDialog() 
Traceback (most recent call last): 
    File "<interactive input>", line 1, in <module> 
TypeError: __init__() takes at least 2 arguments (1 given) 

En primer lugar yo estaba tratando de ver si podía simplemente invocar el cuadro de diálogo. Luego de ver que necesitaba una instancia de SaveFileDialog, traté de asignar una a la variable x. Pero aparentemente eso también requiere dos argumentos, y ahí es donde realmente me pierdo.

¿Ayuda?

Respuesta

7

Aquí hay un pequeño ejemplo para la función asksaveasfilename(). Espero que pueda usarlo:

import Tkinter, Tkconstants, tkFileDialog 

class TkFileDialogExample(Tkinter.Frame): 

    def __init__(self, root): 

     Tkinter.Frame.__init__(self, root) 
     button_opt = {'fill': Tkconstants.BOTH, 'padx': 5, 'pady': 5} 
     Tkinter.Button(self, text='asksaveasfilename', command=self.asksaveasfilename).pack(**button_opt) 

     self.file_opt = options = {} 
     options['filetypes'] = [('all files', '.*'), ('text files', '.txt')] 
     options['initialfile'] = 'myfile.txt' 
     options['parent'] = root 

    def asksaveasfilename(self): 
     filename = tkFileDialog.asksaveasfilename(**self.file_opt) 

     if filename: 
      return open(filename, 'w') 

if __name__=='__main__': 
    root = Tkinter.Tk() 
    TkFileDialogExample(root).pack() 
    root.mainloop() 

Pude abrir (y crear) archivos existentes.

Cuestiones relacionadas