#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
будет запущен только один раз, когда вы впервые откроете графический интерфейс.