如何使用用户条目来更改文件名'?

问题描述 投票:3回答:1

我是学习python的新手,所以我需要帮助,因为我不认识那些可以帮助我的人。我正在尝试创建一个程序,用户可以根据他们在tkinter上的Fname = Entry()上写的内容,从excel更改文件名。

我试图通过使用Fname然后a = Fname.get()来保存来自名为os.rename(Test.xlsx, a + " .xlsx")的条目中的数据以获取存储的数据。但我总是得到一个错误:

    a = Fname.get()
AttributeError: 'NoneType' object has no attribute 'get'

我尝试的另一件事是使用'Name'而不仅仅是'a',但我收到此错误:

    os.rename("Test.xlsx", Fname + " .xlsx")
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

我还试图直接改变'workbook = xlsxwriter.Workbook(Fnam +“。xlsx”)',但错误仍然出现了

PD:我在创建'.xlsx'文件时没有遇到任何问题

我正在使用的代码是下一个:

     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()
python tkinter xlsxwriter os.path
1个回答
2
投票

这是因为你在网格化之后将Fname分配给值,这是None你需要分割线

Fname = Entry().grid(row = 1, column = 1)

Fname = Entry()
Fname.grid(row = 1, column = 1)

如果您稍后因同样的原因尝试引用B1BE,您将遇到类似的问题。

你还需要使用StringVar()才能调用.get()

你的代码应该看起来像我想象的那样

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()
© www.soinside.com 2019 - 2024. All rights reserved.