es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo almacenar datos de filedialog.askopenfilename?

No puedo entender cómo almacenar el valor de filedialog.askopenfilename. Ahora he guardado el valor en una variable local, pero quiero trabajar con este valor en otras funciones más tarde. No puedo devolver este valor porque llama a la función cuando estoy creando el botón. Sin embargo, quiero evitar el uso de variables globales. ¿Cómo puedo hacer esto? ¿Hay alguna otra manera?
Aquí está el código:

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución es usar una clase para almacenar el valor en forma de atributo y acceder a él más tarde en otras funciones de la clase. Aquí hay un ejemplo:

    from tkinter import Tk, StringVar, ttk
    from tkinter import filedialog
    from tkinter import messagebox
    
    class App:
        def __init__(self):
            self.filename = None
            root = Tk()
            button1 = ttk.Button(root, text='Examinar', command=self.browse_files)
            button1.grid(row=0, column=0)
            root.mainloop()
    
        def browse_files(self):
            self.filename = filedialog.askopenfilename(initialdir="/",
                                              title="Seleccionar un archivo",
                                              filetypes=(("Archivos de texto",
                                                          "*.txt*"),
                                                         ("todos los archivos",
                                                          "*.*")))
            print(self.filename)
    
    if __name__ == '__main__':
        app = App()
        print(app.filename) # acceder al atributo filename fuera de la clase
    

    En este ejemplo, la clase App almacena el valor de filename como un atributo self.filename. En el método browse_files, asignamos el nombre del archivo seleccionado a este atributo. Más tarde, podemos acceder a este atributo desde otros métodos de la clase o desde fuera de la clase.

    Tenga en cuenta que creamos una instancia de la clase App llamando a app = App(), y luego podemos acceder al atributo filename de esta instancia llamando a app.filename.

    Este enfoque es más modular y evita el uso de variables globales, que pueden ser una fuente potencial de errores y hacer que el código sea más difícil de mantener.

Comments are closed.