"File Name Not Valid" Python Tkinter
"File Name Not Valid" Python Tkinter
我正在制作一个简单的文本编辑器,每当我尝试保存文件时,它总是给我这个错误。
我将其保存为普通文本文件,但我找不到发生这种情况的原因。我试过将它保存到不同的位置,进行了一些调试尝试。没有什么。有人可以帮我吗?
代码:
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()
可能是因为您在asksaveasfilename()
中使用了defaultextension=".*"
。当您输入不带扩展名的文件名时,.*
将附加到文件名,因此文件名是无效文件名。
将defaultextension=".*"
更改为defaultextension=".txt"
,例如,如果不在文件对话框中输入文件扩展名,则要保存扩展名为.txt
的文件。
我正在制作一个简单的文本编辑器,每当我尝试保存文件时,它总是给我这个错误。
我将其保存为普通文本文件,但我找不到发生这种情况的原因。我试过将它保存到不同的位置,进行了一些调试尝试。没有什么。有人可以帮我吗?
代码:
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()
可能是因为您在asksaveasfilename()
中使用了defaultextension=".*"
。当您输入不带扩展名的文件名时,.*
将附加到文件名,因此文件名是无效文件名。
将defaultextension=".*"
更改为defaultextension=".txt"
,例如,如果不在文件对话框中输入文件扩展名,则要保存扩展名为.txt
的文件。