Как получить обновление переменной после вызова функции python tkinter

#python #tkinter #openpyxl

Вопрос:

Я пытаюсь создать простой графический интерфейс с помощью python tkinter. В общем, этот графический интерфейс сможет загружать любую книгу Excel из filedialog и читать ячейку.

Моя проблема в том, почему моя root_filename переменная не обновляется автоматически при достижении этой строки wb_obj = op.load_workbook (root_filename,data_only=True) ? даже несмотря на то, что я заявляю об этом root_filename как global ?

Я проверил и использовал это root_filename в другой области, например, в CheckButton , и ему удалось получить последнюю информацию при открытии нового файла Excel, но почему это не работает wb_obj ?

Пожалуйста, дайте мне знать, как я могу это исправить?

Ниже приведен мой код на python

 from tkinter import *
from tkinter import filedialog
import openpyxl as op
import os

root = Tk()

cwd = os.getcwd()


root_filename ='sample.xlsx'

def open():
    global root_filename
    root.filename = filedialog.askopenfilename (title="Please select excel template", initialdir=cwd,filetypes=[("Excel Files","*.xlsx")])
    root_filename = root.filename
    my_label = Label (root, text=root_filename).pack()
    return root_filename
 
def printOut (cwd_out):  #this is to check whether getRootFile variable is get update or not
    print (cwd_out)
    return cwd_out

wb_obj = op.load_workbook (root_filename,data_only=True) #why root_filename variable does not update with latest info at this line?
ws_obj = wb_obj.active

OpenButton = Button(root, text='Open File', command=lambda:open()).pack()
CheckButton = Button(root, text='Check current File', command=lambda:printOut(root_filename)).pack()  #this  root_filename variable is working at this line amp; managed to get latest info after new excel file opened

root.mainloop()

 

Комментарии:

1. Он wb_obj не будет автоматически обновляться только потому, что вы измените значение root_filename , необходимое для перезагрузки книги, используя load_workbook метод внутри вашей open функции. На данный момент load_workbook будет запущен только один раз, когда вы впервые откроете графический интерфейс.