【问题标题】:Get a file name with tkinter.filedialog.asksaveasfilename to append in it使用 tkinter.filedialog.asksaveasfilename 获取文件名以附加到其中
【发布时间】:2016-10-13 08:27:55
【问题描述】:

从使用tkinter 设计的GUI 应用程序中,我希望以附加模式将一些数据保存在文件中。要获取文件名,我使用来自filedialog 模块的asksaveasfilename。代码如下:

from tkinter.filedialog import asksaveasfilename

def save_file():

    file_name = asksaveasfilename()

    if file_name:
        f = open(file_name, 'a')
        contents = tab_chrono.text_area.get(1.0, 'end')
        f.write(contents)
        f.close()

当我在对话框中选择一个现有文件时,会出现问题,我收到一个警告说该文件将被覆盖。这是不正确的,因为我附加在文件中。 有没有办法摆脱这个警告?还是我必须自己重写askappendfilenamefiledialog 模块中缺少此功能。

【问题讨论】:

  • 如果你总是选择要附加的文件(但你更新创建新文件)那么你可以使用askopenfilename 但它会显示按钮“打开”而不是“保存”(你可以设置窗口标题= “打开以追加”)。否则您将不得不创建自己的对话框。
  • 很遗憾,如果文件不存在,我想创建一个新文件。
  • 所以你必须创建自己的对话框。尝试print(tkinter.filedialog.__file__) 使用asksaveasfilename(和其他文件对话框)查看文件路径。您可以使用此代码创建自己的版本。或者从头开始创建:)

标签: python tkinter filedialog


【解决方案1】:

asksaveasfilename 对话框接受 confirmoverwrite 参数来启用或禁用文件存在检查。

file_name = asksaveasfilename(confirmoverwrite=False)

这可以在tk_getSaveFile 的 Tk 手册中找到,但似乎没有为 tkinter 记录。它是在 Tk 8.5.11 中引入的,因此在 Tk 方面相对较新(2011 年 11 月发布)。

【讨论】:

【解决方案2】:

在选择现有文件时,使用选项confirmoverwrite 来阻止消息。

import tkFileDialog 
import time
class Example():

    dlg = tkFileDialog.asksaveasfilename(confirmoverwrite=False)
    fname = dlg
    if fname != '':
        try:
            f = open(fname, "rw+")
            text = f.read()
            print text
        except:
            f = open(fname, "w")
        new_text = time.time()
        f.write(str(new_text)+'\n')
        f.close()      

编辑:请注意,我使用 f.read() 能够打印现有文本。
您可能希望删除 f.read() 和后续的 print 语句,并将它们替换为 f.seek(0,2),它将指针定位在现有文件的末尾。
另一个选项如下使用文件打开中的append 选项,如果文件不存在,它将创建文件:

import tkFileDialog 
import time
class Example():

    dlg = tkFileDialog.asksaveasfilename(confirmoverwrite=False)
    fname = dlg
    if fname != '':
        f = open(fname, "a")
        new_text = time.time()
        f.write(str(new_text)+'\n')
        f.close()      

【讨论】:

  • 如果文件不存在,askopenfile 会生成错误信息。如果文件不存在,我想创建它。如果它存在,我想追加到它
  • 你没有在你的问题中规定。请参阅我编辑的答案。
猜你喜欢
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多