2017-07-25 35 views
0

我想存儲文件。出於這個原因,我使用帶'with'語句的filedialog。只要我選擇一個文件並保存,一切正常。然而,當FileDialog的被取消,我得到以下錯誤:tkinter filedialog聲明

文件 「... \ SRC \ test.py」,7號線,在 與filedialog.asksaveasfile(模式= 'W')作爲MYFILE : AttributeError的:進入

是否有一個角落找尋工作與「用」的語句來做到這一點?

import tkinter as tk 
from tkinter import filedialog 

root = tk.Tk() 

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

root.mainloop() 
+0

使用一個'try ... except'塊在它周圍。當你取消對話'filedialog.asksaveasfile()'返回'None'和'None'時,它沒有'__enter __()'來處理'with'語句。你可以編寫你自己的'asksaveasfile()'方法(無論如何,它只是'filedialog.SaveAs()'方便的包裝器)返回一個有效的'with'結構,但是'myFile'必須被設置爲'沒有',你必須在寫完之前檢查它,完全否定'with'語句的目的。 – zwer

+0

而不是編輯您對問題的回答,請將其作爲下面的答案發布。 – Lafexlos

回答

0

感謝您的澄清,zwer。我認爲一個嘗試... 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()