Как я могу использовать пользовательскую запись для изменения имени файла? - PullRequest
3 голосов
/ 11 апреля 2019

Я новичок в изучении Python, поэтому мне нужна помощь с этим, потому что я не знаю людей, которые могут мне помочь. Я пытаюсь создать программу, в которой пользователь может изменить имя файла из Excel в зависимости от того, что они написали на Fname = Entry() из tkinter.

Я пытался сохранить данные из записи, названной Fname, используя 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 Ответ

2 голосов
/ 11 апреля 2019

Это потому, что вы присваиваете Fname значению после сетки, равному None, вам нужно разделить строку

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

в

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

Вы столкнетесь с подобными проблемами, если позже попытаетесь обратиться к B1 или BE по той же причине.

Также вам нужно использовать 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()
...