因此,我将tkinter与python 3和Windows 10(64位)一起使用。我有一个保存功能,可以将几个输入框中的内容保存为.txt文件。然后,用户可以从应用程序中打开.txt文件,所有数据将返回其原始位置。作为程序的一部分,标签会显示当前打开的文件的文件名。用户可以在窗口中编辑文件名。
当用户保存时,我想将文件的文件名更改为用户在窗口中写入的文件名。这在大多数情况下都有效。但是,如果用户在输入框中写了任何东西,并且在我的应用程序中更改了文件名,那么在保存时,不仅会更改实际的文件名。
相反,它只是使用新文件名创建一个新文件。它还会吐出错误:
FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'C:/Users/User/Documents/Python stuff/Other apps/Veteris/Scripts/test.txt' -> 'test2.txt'
我正在使用os.rename()函数。另外,当用户打开文件时,我无法显示文件名。任何帮助,也将不胜感激。这是我的代码:
def _open():
global file_dir
file_dir = tkfd.askopenfilename(title = "Open...", defaultextension =
'.txt', filetypes = (('Text files', '*.txt'), ('Excel
Workbook', '*.xlsx')))
if file_dir.endswith('.txt'):
with open(file_dir, 'r') as input_file:
# saves stuff
elif file_dir.endswith('.xlsx'):
# saves stuff
new_file_name = os.path.basename(file_dir.name).strip('.txt.xlsx')
file_title.config(text = new_file_name)
def save_as():
global filepath
global file_dir
global file_name
global save_status
file_dir = tkfd.asksaveasfilename(initialfile = file_name, initialdir
= filepath, title = "Save as", defaultextension = '.txt',
filetypes = [('Text files', '*.txt')]) # Sets file_dir to the
directory the user creates (in save as dialog)
try:
with open(file_dir, 'w') as output_file:
# saves the stuff
time_saved_label.config(text = "Saved")
save_status = True
except:
print("'Save as' cancelled")
def save():
global file_dir
global file_name
global save_status
notepad_save = notepad.get('1.0', END).strip('\n')
eyes_save = eyes_entry.get().strip('\n') + '\n'
if file_dir is None:
return save_as()
else:
with open(file_dir, 'w') as output_file:
output_file.write(notepad_save)
new_file_name = file_name + '.txt'
os.rename(file_dir, new_file_name)
就像我说的那样,代码应该更改文件名,就是这样(以及更新内容)。
相反,它只是创建具有最新更改的副本。