我正在创建一个Tkinter
的GUI,它将自动化多个角色的最终得分。我对Tkinter
也很新。在我的代码中,我正在阅读几个将创建到数据框中的Excel工作表,以便我对每个工作表进行适当的计算。我将要阅读的一张excel表是一张excel表,其中包含我的团队中的代码用户可以进入并编辑/添加新字符的字符列表(如果需要)。当他们运行代码时,将使用任何编辑/添加的字符更新分析。对于这个问题,我将以此为例,称之为filename
。
理想情况下,我想在Tkinter
中创建一个浏览按钮,提示用户查找excel文件,然后将所选文件存储在变量filename
中以备将来使用。我的代码稍后将嵌入pd.read_excel()
,我希望filename
成为将被读入的excel文件/ io
参数。我只是想知道这是否可行。看看其他尝试并不一定能解决我想要的问题。
这也是我第一次使用Tkinter,但是这里有一个 草案 (强调草稿!)到目前为止我所拥有的:
import tkinter as tk
from tkinter import *
class Automation:
def __init__(self, master):
self.master = master
master.title("Test")
self.label = Label(master, text="Welcome to the Score Automation.\nPlease select the ALC File containing all updated names.")
self.label.pack()
self.browse_button_characterlist = Button(master, text="Select File", command=self.askopenfile)
self.browse_button_characterlist.pack()
self.close_button = Button(master, text="Close", command=master.quit)
self.close_button.pack()
def askopenfile(self):
root = tk.Tk()
root.withdraw()
filename = askopenfilename()
print(filename)
root = Tk()
my_gui = Automation(root)
root.mainloop()
然后将文件名作为参数存储到pandas.read_excel()
pd.read_excel(filename, usecols = "B",
skiprows = range(0,4), skip_footer = 2)
有关订购或我如何使用askopenfile()
的任何建议也会很棒。提前谢谢。
答案 0 :(得分:1)
你在这里缺少一些东西 - 一个对象是什么,一个模块是什么(以及如果我理解你的尝试,如何从中提取方法),以及self
的使用。这甚至在tk
进程之前就像根窗口一样。我建议一个教程,首先是Python,然后是tkinter
。对于你的问题,请在顶部添加:
#Do not import *, import only what you need.
from tkinter.filedialog import askopenfilename
并更改您的事件处理程序(我强烈建议您将名称更改为程序中有意义的内容,即readExcel
):
def askopenfile(self):
#Force specific file types only. Use `self` to make the file name available from any method.
self.filename = askopenfilename(filetypes=(('xsl','*.xsl'),('xslx','*.xslx')))
self.excel = pd.read_excel(self.filename, usecols = "B", skiprows = range(0,4), skip_footer = 2)
注意我在Tk()
中删除了您拥有Tk
个self.master
对象的两条filename
行。不要做两个,因为它不稳定和资源沉重,加上没有理由两个(你已经有一个gui app,为什么要做两个?)。
您可能希望向处理程序添加check / try除块。现在excel
和self.
成员都可以通过Automation
在{{1}}对象中的任何其他方法中使用。