创建 Python 按钮保存编辑的文件

Posted

技术标签:

【中文标题】创建 Python 按钮保存编辑的文件【英文标题】:Creating Python button saves edited file 【发布时间】:2015-04-15 17:04:10 【问题描述】:

我是 tkinter 的新手,想知道是否有人能指出我正确的方向。我想知道如何在没有 saveasdialog 的情况下覆盖以前保存的文件,例如如何实现实际的保存功能。我目前正在使用它为我的项目保存具有不同点的 .txt 文件。 另存为功能有效。我是否必须找到目录并以某种方式更改它?有没有更简单的方法来做到这一点? 到目前为止,我对 save 和 saveas 的了解如下:

def saveFile(self):
    method = self.method.current()
    try:
        with open(self.f,'w') as outputFile:
            if(method==0):
                method.write()
    except AttributeError:
        self.save_as

def saveFileAs(self):

    f = filedialog.asksaveasfile(mode='w', defaultextension=".txt")
    method = self.method.current()
    #used to write to .txt file and does save
    if(method == 0):
    # f.write() to save to .txtfile

【问题讨论】:

你是什么意思,“一个实际的保存功能”?如果它正确地将您的文件保存到磁盘,则它是一个实际的保存功能。如果您没有调用asksaveasfile()asksaveasfilename(),则必须以其他方式实现它。您想知道如何从头开始创建“另存为”功能吗? 我所说的asksaveasfile()中的保存功能确实将其保存到磁盘上,但是我是否可以通过某种方式编辑同一个文件,然后将其替换到同一个文件/路径中没有出现对话框?也许检查文件是否存在然后替换文本。谢谢 什么对话框?对话框询问您要将文件保存在哪里?或者对话框询问您是否确定要覆盖存在的文件?或者您的意思是类似于“保存”而不是“另存为...”,它会默默地覆盖当前的工作文件? 是的,我的意思是 save 会默默地覆盖当前的工作文件,只是想知道是否有其他我不知道的方法 【参考方案1】:

如果您想要一个静默覆盖当前文件的保存功能,最基本的做法是保存对用户选择的文件名/位置的引用,然后下次保存时可以重复使用它而不是询问换一个新的。以下(取自我的程序)有一个“普通”保存功能,用于检查记录中是否有保存文件名,并使用它(如果存在)或转到“另存为”功能。普通版本恰好有一个 return 值,以便它可以与程序中其他地方的加载(打开)函数交互(在加载新文件之前询问用户是否保存未保存的工作)。

def save_plain(self, *args):
    """
    A plain save function. If there's no preexisting file name,
    uses save_as() instead.
    Parameter:
        *args: may include an event
    """
    if self.savename: # if there's a name
        self.save(self.savename) # then use it
    elif self.save_as(): # else, use save_as instead
        return True # successful save returns True
    return False # else, return False

def save_as(self, *args):
    """
    A save as function, which asks for a name and only retains it if it was given
    (canceling makes empty string, which isn't saved).
    Parameter:
        *args: may include an event
    """
    temp = filedialog.asksaveasfilename(defaultextension=".txt", \
    filetypes=(('Text files', '.txt'),('All files', '.*'))) # ask for a name
    if temp: # if we got one,
        self.savename = temp # retain it
        self.save(temp) # and pass it to save()
        return True
    return False

def save(self, filename):
    """
    Does the actual saving business of writing a file with the given name.
    Parameter:
        filename (string): the name of the file to write
    """
    try: # write the movelist to a file with the specified name
        with open(filename, 'w', encoding = 'utf-8-sig') as output:
            for item in self.movelist:
                output.write(item + "\n")
        self.unsaved_changes = False # they just saved, so there are no unsaved changes
    except: # if that doesn't work for some reason, say so
        messagebox.showerror(title="Error", \
        message="Error saving file. Ensure that there is room and you have write permission.")

【讨论】:

非常感谢,这对您有很大帮助!

以上是关于创建 Python 按钮保存编辑的文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在保存模式下打开向导操作还隐藏编辑、创建、保存和丢弃按钮 Odoo 11

如何在 Java 中编写保存按钮的功能?

保存、编辑、删除按钮的功能

编辑宏以在桌面上为任何用户创建文件夹

使用 Tkinter 和 Python 制作文本编辑器

Web 编辑器-如何实现保存文件到本地及打开本地文件