【问题标题】:tkinter filedialog with statement带有语句的 tkinter 文件对话框
【发布时间】:2017-07-25 11:40:54
【问题描述】:

我想存储一个文件。出于这个原因,我使用带有'with'语句的filedialog。只要我选择一个文件并保存它,一切正常。但是,当文件对话框被取消时,我收到以下错误:

文件“...\src\test.py”,第 7 行,在 使用 filedialog.asksaveasfile(mode='w') 作为 myFile: 属性错误:进入

有没有办法用'with'语句来完成这个?

import tkinter as tk
from tkinter import filedialog

root = tk.Tk()

with filedialog.asksaveasfile(mode='w') as myFile:
    myFile.write('Test')

root.mainloop()

【问题讨论】:

  • 在其周围使用 try...except 块。当您取消对话框时,filedialog.asksaveasfile() 将返回 None 并且 None 中没有 __enter__() 来处理 with 语句。您可以编写自己的 asksaveasfile() 方法(无论如何,它只是对 filedialog.SaveAs() 的方便包装)以返回有效的 with 结构无论如何,但随后必须将 myFile 设置为 None 并且您会在完全否定@​​987654333@ 声明的目的之前,必须对其进行检查。
  • 不要编辑您对问题的答案,而是将其作为答案发布在下面。

标签: python-3.x tkinter with-statement filedialog


【解决方案1】:

感谢您的澄清,zwer。我认为 try...finally 块是最方便的解决方案。我将克服以下问题:

import tkinter as tk
from tkinter import filedialog

def Test():        
    root = tk.Tk()

    myFile = filedialog.asksaveasfile(mode='w')

    if not myFile:
        return        
    try:
        myFile.write('Test')
    finally:
        myFile.close()

    root.mainloop()


Test()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    相关资源
    最近更新 更多