我用tkinter设计了一个简单的GUI。我正在从桌面上传一个 excel 文件,并在此文件的路径的帮助下,我正在尝试将此 excel 文件作为数据帧进行处理。我正在使用filedialog.askopenfilename()
上传文件。我设计了一个菜单栏file
及其子菜单作为上传文件的open
。
以下是实现它的代码
from tkinter import *
from tkinter import filedialog
import pandas as pd
root = Tk()
menubar = Menu(root)
root.config(menu= menubar)
subMenu = Menu(menubar, tearoff=0)
def browse_file():
global filename
filename = filedialog.askopenfilename()
menubar.add_cascade(label="File", menu =subMenu)
subMenu.add_command(label="Open", command=browse_file)
root.geometry("600x600")
root.mainloop()
df = pd.read_excel(filename)
.
. #Further processing of all three dataframe .
.
print(df)
我想通过这种方式上传三个不同的 Excel 文件并处理数据帧。以上代码仅用于上传一个数据帧作为示例。上面的代码适用于它,但是当我在上传文件后关闭 gui 时,数据帧的处理就开始了。 我想知道,如何在 GUI 保持打开状态的同时上传此文件并同时开始处理文件? 因为我必须关闭我的 GUI 才能开始进一步处理数据帧
另外,如果我在写作
df = pd.read_excel(filename)
.
. #Further processing of all three dataframe .
.
print(df)
上面root.mainloop
比我得到以下错误-
df = pd.read_excel(filename)
NameError: name 'filename' is not defined
但是我已经将文件名定义为全局变量。我正在尝试上面的代码,以便在 gui 保持打开状态时处理文件。为什么我会收到此错误?
所以我的问题是如何上传所有三个 excel 文件并将其作为数据帧处理,同时 gui 保持打开状态。因为我必须关闭 GUI 才能进行进一步处理。我想使这个GUI与用户更具交互性。如果我正在上传文件,则会显示上传文件的状态。
至少它可以是这样的:
import tkinter as tk
from tkinter import filedialog
import pandas as pd
from threading import Thread
root = tk.Tk()
menubar = tk.Menu(root)
root.config(menu= menubar)
subMenu = tk.Menu(menubar, tearoff=0)
def browse_file():
filename = filedialog.askopenfilename()
df = pd.read_excel(filename)
#whatever you need to do with your df...
menubar.add_cascade(label="File", menu=subMenu)
subMenu.add_command(label="Open", command=lambda: Thread(target=browse_file).start())
root.geometry("600x600")
root.mainloop()