我是学习Python的新手,所以我需要帮助,因为我不认识可以帮助我的人.我正在尝试制作一个程序,其中用户可以根据自己在tkinter的Fname = Entry()上编写的内容来从excel更改文件名.
我试图通过使用= Fname.get()然后使用os.rename(Test.xlsx,“ .xlsx”)保存名为Fname的条目中的数据来获取存储的数据.但是我总是得到一个错误:
@H_404_8@ a = Fname.get() AttributeError: 'NoneType' object has no attribute 'get'
我尝试的另一件事是使用仅由“ a”表示的“ Fname”,但出现此错误:
@H_404_8@ os.rename("Test.xlsx",Fname + " .xlsx") TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
我也尝试直接更改’workbook = xlsxwriter.Workbook(Fnam“ .xlsx”)’,但错误仍然出现
PD:创建’.xlsx’文件没有任何麻烦
我正在使用的代码是下一个:
@H_404_8@ import xlsxwriter import os.path from tkinter import * def run(): a = Fname.get() os.rename("Test.xlsx",Fname + " .xlsx") screen = Tk() B1 = Button(text = "Name",command = run).grid(row = 2,column = 2) Fname = Entry().grid(row = 1,column = 1) BE = Button(text = "Exit").grid(row = 3,column = 3) workbook = xlsxwriter.Workbook("Test.xlsx") worksheet = workbook.add_worksheet() worksheet.write("A1","Question") worksheet.write("B1","Answer") workbook.close() screen.mainloop()
最佳答案
这是因为您要在网格化之后将Fname分配给该值,即None,则需要拆分行
@H_404_8@Fname = Entry().grid(row = 1,column = 1)
进入
@H_404_8@Fname = Entry() Fname.grid(row = 1,column = 1)
如果您以后出于相同的原因尝试引用B1或BE,也会遇到类似的问题.
另外,您还需要使用StringVar()才能调用.get()
您的代码应该像我想象的那样
@H_404_8@import xlsxwriter import os.path from tkinter import * def run(): a = user_input.get() os.rename("Test.xlsx",a + ".xlsx") screen = Tk() B1 = Button(text="Name",command=run) B1.grid(row=2,column=2) user_input = StringVar() Fname = Entry(textvariable=user_input) Fname.grid(row=1,column=1) BE = Button(text="Exit") BE.grid(row=3,column=3) workbook = xlsxwriter.Workbook("Test.xlsx") worksheet = workbook.add_worksheet() worksheet.write("A1","Question") worksheet.write("B1","Answer") workbook.close() screen.mainloop()