2017-07-25 14 views
0

ファイルを保存したいと思います。このため、私はfiledialogを 'with'ステートメントで使用します。私がファイルを選択して保存する限り、すべて正常に動作します。 FileDialogがキャンセルされたときしかし、私は次のエラーを取得:tkinter filedialog with statement

ファイルを "... \ SRC \ test.py"、7行目、filedialog.asksaveasfileと (モード= 'W')のmyFileとしてで: はAttributeError:

を入力するには、文の 'は' でこれを達成するarroundの仕事はありますか?

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'は 'with'文を処理するために' __enter __() 'を持ちません。あなたは 'asksaveasfile()'メソッドを書くことができます(ちょっとでも 'filedialog.SaveAs() 'の便利なラッパーです)、有効な' with'構造体を返すことはできますが、 'myFile'は''なし ''の目的を完全に否定するように書く前に、チェックする必要があります。 – zwer

+0

質問の回答を編集する代わりに、以下の回答として投稿してください。 – Lafexlos

答えて

0

説明をいただきありがとうございます。 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() 
関連する問題