«Имя файла Недопустимо» Python Tkinter

#python #tkinter #filedialog

Вопрос:

Я создаю простой текстовый редактор, и всякий раз, когда я пытаюсь сохранить файл, он всегда выдает мне эту ошибку.

введите описание изображения здесь

Я сохраняю его как обычный текстовый файл и не могу найти причину, по которой это происходит. Я попытался сохранить его в другом месте, предпринял несколько попыток отладки. Ничего. Кто-нибудь может мне помочь?

Код:

 from tkinter import* 
from tkinter import filedialog 
from tkinter import font 

root = Tk() 
root.title("NewNotepad")
root.geometry("1200x660") 

def new_file(): 
    my_text.delete("1.0", END)
    root.title('New File')
    status_bar.config(text="New File") 

def open_file(): 
     my_text.delete("1.0", END)
     text_file = filedialog.askopenfilename(title="Open File", filetypes=(("Text Files", "*txt"), ("HTML Files", "*html")))  
     name = text_file 
     status_bar.config(text=name) 
     text_file = open(text_file, 'r')
     stuff = text_file.read() 
     my_text.insert(END, stuff) 
     text_file.close() 

def save_as_file(): 
    text_file = filedialog.asksaveasfilename(defaultextension=".*", title="Save File", initialdir="C:/gui/", filetypes=(("Text Files", "*txt"), ("HTML Files", "*html"))) 
    if text_file: 
        name = text_file 
        name = name.replace("C:/gui/", "") 
        root.title(f'{name} - NewNotepad') 
        text_file = open(text_file, 'w') 
        text_file.write(my_text.get(1.0, END))  
        text_file.close() 

my_frame = Frame(root)
my_frame.pack(pady=5)

text_scroll = Scrollbar(my_frame) 
text_scroll.pack(side=RIGHT, fill=Y) 

my_text = Text(my_frame, width=97, height=25, font=("Helvetica", 16), selectbackground="Light Blue", selectforeground="Black", undo=True, yscrollcommand=text_scroll.set) 
my_text.pack() 

text_scroll.config(command=my_text.yview)

my_menu =  Menu(root)
root.config(menu=my_menu)

file_menu = Menu(my_menu, tearoff=False)
my_menu.add_cascade(label="File", menu=file_menu)
file_menu.add_command(label="New", command=new_file) 
file_menu.add_command(label="Open", command=open_file)
file_menu.add_command(label="Save")
file_menu.add_command(label="Save As", command=save_as_file) 
file_menu.add_separator() 
file_menu.add_command(label="Exit", command=root.quit) 

edit_menu = Menu(my_menu, tearoff=False)
my_menu.add_cascade(label="Edit", menu=edit_menu)
edit_menu.add_command(label="Cut") 
edit_menu.add_command(label="Copy")
edit_menu.add_separator()
edit_menu.add_command(label="Undo")
edit_menu.add_command(label="Redo")

status_bar = Label(text="Ready", anchor=E)
status_bar.pack(fill=X, side=BOTTOM, ipady=5) 

root.mainloop() 
 

Комментарии:

1. Попробуйте использовать *.txt и *.html в filetypes

2. Почему вы удаляете часть пути к файлу? Вероятно, вы в конечном итоге получите относительный путь, который не является допустимым.

3. Первый из них работал на меня. Тнх.

Ответ №1:

Это может быть потому, что вы привыкли defaultextension=".*" asksaveasfilename() . Когда вы вводите имя файла без расширения, .* оно будет добавлено к имени файла, поэтому имя файла является недопустимым.

Измените defaultextension=".*" значение defaultextension=".txt" , например, если вы хотите сохранить файл с расширением .txt , если вы не вводите расширение файла в диалоговом окне файл.