Python 打开并更改以前创建的文本文件后,如何保存该文件?

Python 打开并更改以前创建的文本文件后,如何保存该文件?,python,tkinter,Python,Tkinter,我正在用python构建一个类似记事本的文本编辑器,我正在使用Tkinter。 我已经成功地实现了编辑器的新建、打开、另存为、退出、剪切、复制、粘贴、关于和帮助功能。但我正在努力使用Save函数。 当我打开以前保存的文件并在编辑后保存时,它的功能类似于另存为功能。我使用tkFileDialog.asksavefile保存文本文件,并使用tkFileDialog.asksavefilename实现编辑器的另存为功能 我对python非常陌生。 有人能带我到这里吗 #! /usr/bin/pytho

我正在用python构建一个类似记事本的文本编辑器,我正在使用Tkinter。 我已经成功地实现了编辑器的新建、打开、另存为、退出、剪切、复制、粘贴、关于和帮助功能。但我正在努力使用Save函数。 当我打开以前保存的文件并在编辑后保存时,它的功能类似于另存为功能。我使用
tkFileDialog.asksavefile
保存文本文件,并使用
tkFileDialog.asksavefilename
实现编辑器的另存为功能

我对python非常陌生。 有人能带我到这里吗

#! /usr/bin/python
import Tkinter

from Tkinter import *

import tkFileDialog, tkMessageBox     
import os

class OpenEdit:

    def __init__(self):

        # Root Frame widget

        self.root = Tk()

        # Menu panel in frame

        menubar = Menu(self.root)

        # File menu,for open,save,save as and quit       

        filemenu = Menu(menubar)
        editmenu = Menu(menubar)
        filemenu.add_command(label="New", command=self.new)
        filemenu.add_command(label="Open", command=self.open)
        filemenu.add_command(label="Save", command=self.save)
        filemenu.add_command(label="Save as", command=self.save_as)
        filemenu.add_separator()
        filemenu.add_command(label="Quit", command=self.root.quit)
        menubar.add_cascade(label="File", menu=filemenu)

        #Edit menu including Cut, Copy and Paste 
        editmenu = Menu(menubar)
        editmenu.add_command(label="Cut", command=self.cut)
        editmenu.add_command(label="copy", command=self.copy)
        editmenu.add_command(label="Paste", command=self.paste)
        menubar.add_cascade(label="Edit", menu=editmenu)

        # About menu for show about us and help

        aboutmenu = Menu(menubar)
        aboutmenu.add_command(label="About", command=self.about)
        aboutmenu.add_command(label="Help", command=self.help)
        menubar.add_cascade(label="About", menu=aboutmenu)

        # Returning defined setting for GUI

        self.root.config(menu=menubar)





        #Setting up the title of the widget

        self.root.title("Untitled - OpenEdit")

        # Adding Text Widget in the GUI

        self.text = Text(self.root)

        # This line allows it to be resized    

        self.text.pack(expand=YES, fill=BOTH)

        self.root.mainloop()       


        #Defining new method

    def new(self):
        self.root.title("Untitled - OpenEdit")
        self.file = None
        self.text.delete(1.0,END)

    #Defining open method

    def open(self):

        self.file = tkFileDialog.askopenfilename(defaultextension=".txt",filetypes=[("All Files","*.*"),("Text Documents","*.txt")])

        if self.file == "":

            #no file to open

            self.file = None
        else:

            #try to open the file
            #set the window title

            self.root.title(os.path.basename(self.file) + " - OpenEdit")
            self.text.delete(1.0,END)

            file = open(self.file,"r")

            self.text.insert(1.0,file.read())

            file.close()    

    #Defining save method
    def save(self):

        fileName = tkFileDialog.asksaveasfile(mode='w')
        try:
            file = open(fileName, 'w')
            textoutput = self.text.get(0.0, END)
            file.write(textoutput)
        except:
            pass
        finally:
            file.close()

    #Defining save_as method

    def save_as(self):

        fileName = tkFileDialog.asksaveasfilename(initialfile='Untitled.txt',defaultextension=".txt",filetypes=[("All Files","*.*"),("Text Documents","*.txt")])
        try:
            file = open(fileName, 'w')
            textoutput = self.text.get(0.0, END)
            file.write(textoutput)
        except:
            pass
        finally:
            file.close()     

    #Defining cut method

    def cut(self):
        self.text.event_generate("<<Cut>>")

    #Defining copy method

    def copy(self):
        self.text.event_generate("<<Copy>>")

     #Defining paste method
    def paste(self):
        self.text.event_generate("<<Paste>>")

    #Defining about method

    def about(self):
        tkMessageBox.showinfo("OpenEdit","Created by: XYZ")

    #Defining help method

    def help(self):
        tkMessageBox.showinfo("Help","This is help")



#Starting the instance of the class OpenEdit
OpenEdit()
#/usr/bin/python
进口Tkinter
从Tkinter进口*
导入tkFileDialog,tkMessageBox
导入操作系统
类OpenEdit:
定义初始化(自):
#根框架小部件
self.root=Tk()
#框架中的菜单面板
菜单栏=菜单(self.root)
#文件菜单,用于打开、保存、另存为和退出
文件菜单=菜单(菜单栏)
编辑菜单=菜单(菜单栏)
filemenu.add_命令(label=“New”,command=self.New)
filemenu.add_命令(label=“Open”,command=self.Open)
filemenu.add_命令(label=“Save”,command=self.Save)
filemenu.add_命令(label=“另存为”,command=self.Save_-as)
filemenu.add_separator()
filemenu.add_命令(label=“Quit”,command=self.root.Quit)
menubar.add_级联(label=“File”,menu=filemenu)
#编辑菜单,包括剪切、复制和粘贴
编辑菜单=菜单(菜单栏)
编辑菜单.添加命令(label=“Cut”,command=self.Cut)
editmenu.add_命令(label=“copy”,command=self.copy)
editmenu.add_命令(label=“Paste”,command=self.Paste)
菜单栏.add_级联(label=“Edit”,menu=editmenu)
#关于菜单显示关于我们和帮助
aboutmenu=菜单(菜单栏)
aboutmenu.add_命令(label=“About”,command=self.About)
aboutmenu.add_命令(label=“Help”,command=self.Help)
菜单栏.add_级联(label=“About”,menu=aboutmenu)
#返回GUI的已定义设置
self.root.config(menu=menubar)
#设置小部件的标题
self.root.title(“Untitled-OpenEdit”)
#在GUI中添加文本小部件
self.text=文本(self.root)
#此行允许调整其大小
self.text.pack(expand=YES,fill=BOTH)
self.root.mainloop()
#定义新方法
def新(自我):
self.root.title(“Untitled-OpenEdit”)
self.file=None
self.text.delete(1.0,结束)
#定义开放式方法
def打开(自):
self.file=tkFileDialog.askopenfilename(defaultextension=“.txt”,filetypes=[(“所有文件”,“**”),(“文本文档”,“*.txt”)]))
如果self.file==“”:
#没有要打开的文件
self.file=None
其他:
#尝试打开该文件
#设置窗口标题
self.root.title(os.path.basename(self.file)+“-OpenEdit”)
self.text.delete(1.0,结束)
文件=打开(self.file,“r”)
self.text.insert(1.0,file.read())
file.close()文件
#定义保存方法
def保存(自我):
fileName=tkFileDialog.asksaveasfile(mode='w')
尝试:
文件=打开(文件名“w”)
textoutput=self.text.get(0.0,结束)
file.write(文本输出)
除:
通过
最后:
file.close()文件
#定义另存为方法
def另存为(自身):
fileName=tkFileDialog.asksaveasfilename(initialfile='Untitled.txt',defaultextension=“.txt”,filetypes=[(“所有文件”,“**”),(“文本文档”,“*.txt”))
尝试:
文件=打开(文件名“w”)
textoutput=self.text.get(0.0,结束)
file.write(文本输出)
除:
通过
最后:
file.close()文件
#定义切割方法
def切割(自):
self.text.event_generate(“”)
#定义复制方法
def副本(自我):
self.text.event_generate(“”)
#定义粘贴方法
def粘贴(自):
self.text.event_generate(“”)
#关于方法的定义
关于(自我)的定义:
tkMessageBox.showinfo(“OpenEdit”,“创建人:XYZ”)
#定义帮助方法
def帮助(自我):
showinfo(“帮助”,“这是帮助”)
#正在启动OpenEdit类的实例
OpenEdit()

您的
保存
函数明确提示输入文件名。如果不想提示输入文件名,请不要这样做

相反,请使用当前文件名。。。我看到
open
已经保存了它:

def open(self):
    self.file = tkFileDialog.askopenfilename(...
因此,您可以在“保存”中重复使用它:

def save(self):
    # filename = tkFileDialog.asksaveasfile(...
    fileName = self.file

save
函数显式提示输入文件名。如果不想提示输入文件名,请不要这样做

相反,请使用当前文件名。。。我看到
open
已经保存了它:

def open(self):
    self.file = tkFileDialog.askopenfilename(...
因此,您可以在“保存”中重复使用它:

def save(self):
    # filename = tkFileDialog.asksaveasfile(...
    fileName = self.file
您只需在
保存
中更改一行,就可以了。您可以通过检查是否已设置了
self.file
,并提示是否未设置来改进它。。。您还可以询问用户是否要覆盖现有文件。但是上面的一行更改将在简单的情况下起作用。您只需要一行更改
保存
,它就在那里。您可以通过检查是否已设置了
self.file
,并提示是否未设置来改进它。。。您还可以询问用户是否要覆盖现有文件。但是上面的一行更改将在简单的情况下起作用。