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 obtener el nombre de archivo de una función para que funcione en otra.

Tengo 2 funciones (Upload y Calc): la 1ª abre el archivo y escribe su nombre (usando un botón); la 2ª debería trabajar con los datos de este archivo (un archivo de Excel, también se iniciará después de presionar el botón). La 1ª parte funciona bien, pero no entiendo cómo obtener el nombre del archivo de la 1ª función (que recibe el archivo) para que funcione en la 2ª función (que trabaja con los datos del archivo).

import tkinter como tk
from tkinter import Label, Pack, filedialog
from tkinter.constants import CENTER, LEFT
from tkinter.filedialog import askopenfilename
from pathlib import Path
from openpyxl import Workbook
import os

global filename

def Upload():
    filename = filedialog.askopenfilename()
    filepath=filename
    path=Path(filepath)
    #print(path.name)
    #insertar verificación de la extensión del archivo
    label2 = Label(text=path.name, font="Arial 17", justify=LEFT)
    label2.place(relx=0.35, rely=.13)  
    #print('Selected:', filename)
    return(path.name)

def Calc():
    workbook = load_workbook(filename=path.name)

root= tk.Tk()
canvas1 = tk.Canvas(root, width = 300, height = 300)
canvas1.pack()    
button1 = tk.Button(text='Abrir Archivo',command=Upload, bg='purple',fg='white')
button1.place (relx = 0.5, rely = 0.5, anchor=CENTER)
button2 = tk.Button(text='Calcular',command=Calc, bg='purple',fg='white')
button2.place (relx = 0.5, rely = 0.6, anchor=CENTER)
label1 = Label(text= 'Archivo Seleccionado:', fg="#eee", bg="#333") 
label1.place(relx = 0.5, y=20, anchor=CENTER)
canvas1.create_window(150, 150, window=button1)

root.mainloop() 
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para pasar el nombre de archivo de la función de carga de archivos (“Upload”) a la función de cálculo (“Calc”), puede crear una variable global llamada “filename” y establecerla igual al nombre de archivo devuelto por la función “Upload”. Luego, puede acceder a esta variable global dentro de la función “Calc” utilizando la palabra clave “global”. Aquí hay una versión actualizada del código con estos cambios:

    import tkinter as tk
    from tkinter import Label, Pack, filedialog
    from tkinter.constants import CENTER, LEFT
    from tkinter.filedialog import askopenfilename
    from pathlib import Path
    from openpyxl import Workbook, load_workbook
    import os
    
    global filename
    
    def Upload():
        global filename
        filename = filedialog.askopenfilename()
        filepath = filename
        path = Path(filepath)
        #print(path.name)
        # Insertar verificación de extensión de archivo
        label2 = Label(text=path.name, font="Arial 17", justify=LEFT)
        label2.place(relx=0.35, rely=.13)  
        #print('Selected:', filename)
        return(path.name)
    
    def Calc():
        global filename
        workbook = load_workbook(filename=filename)
    
    root= tk.Tk()
    canvas1 = tk.Canvas(root, width = 300, height = 300)
    canvas1.pack()    
    button1 = tk.Button(text='Abrir archivo',command=Upload, bg='purple',fg='white')
    button1.place (relx = 0.5, rely = 0.5, anchor=CENTER)
    button2 = tk.Button(text='Calcular',command=Calc, bg='purple',fg='white')
    button2.place (relx = 0.5, rely = 0.6, anchor=CENTER)
    label1 = Label(text= 'Archivo seleccionado:', fg="#eee", bg="#333") 
    label1.place(relx = 0.5, y=20, anchor=CENTER)
    canvas1.create_window(150, 150, window=button1)
    
    root.mainloop()
    

    Tenga en cuenta que para usar la variable global, es necesario declararla como “global” tanto en la función donde la está asignando (“Upload”) como en la función donde la está utilizando (“Calc”).

Comments are closed.