#python #tkinter #xlsxwriter #os.path
#python #tkinter #xlsxwriter #os.path
Вопрос:
Я новичок в изучении python, поэтому мне нужна помощь в этом, потому что я не знаю людей, которые могли бы мне помочь. Я пытаюсь создать программу, в которой пользователь может изменять имя файла из Excel в зависимости от того, что они написали на Fname = Entry()
из tkinter.
Я попытался сохранить данные из записи с именем as Fname
с помощью using a = Fname.get()
, а затем os.rename(Test.xlsx, a " .xlsx")
сохранить данные. Но я всегда получаю сообщение об ошибке:
a = Fname.get()
AttributeError: 'NoneType' object has no attribute 'get'
Еще одна вещь, которую я пробовал, это использовать ‘Fname’ вместо просто ‘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()
Ответ №1:
Это потому, что вы присваиваете Fname
значение после сетки, которое None
вам нужно разделить строку
Fname = Entry().grid(row = 1, column = 1)
в
Fname = Entry()
Fname.grid(row = 1, column = 1)
Вы столкнетесь с аналогичными проблемами, если позже попытаетесь сослаться на B1
or BE
по той же причине.
Также вам нужно использовать a 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()
Комментарии:
1. Спасибо за ответ, но сообщение об ошибке все равно появилось.
2. @PedroElizaldeAcevedo Я полагаю, что это другая ошибка, но вам также необходимо изменить
os.rename("Test.xlsx", Fname " .xlsx")
наos.rename("Test.xlsx", a ".xlsx")