2011-07-23 17 views
2

プログラミングクラスにTkinterを使用し始めたばかりで、ファイルダイアログハンドラを使用するのに少し問題があります。 fileopenとfilesaveasメソッドは正しく動作しますが、filesaveメソッドは正しく動作しません。 仕様では、filesaveメソッドが最後に保存されたファイルに保存する必要があります。ファイルが保存されていない場合は、最後に開いたファイルに保存します。それ以外の場合は、デフォルト名のquiz_spec.pyに保存します。何らかの理由で、最初の2回の書き込み呼び出しは、ファイルに到達したときにファイルを保存していないように見えます(エラーも発生していません)。 誰かが同じセーブコールfilesaveasとfilesaveは異なった働きをしており、tkFileDialog save関数の良い例を指摘しています。tkFileDialog filesaveメソッドが動作しない

ファイルが self.lastopenを処理し、 self.lastsaveはあなたが filesaveを呼び出す時点で Falseの一部と同等に設定されていることを私にはかなり明確
class FileMan(): 

    def __init__(self): 
     self.lastsave = None 
     self.lastopen = None 

    def fileopen(self): 
     handle = askopenfile(mode = 'r') 
     print "name of file you picked = "+str(handle.name) 
     self.lastopen = handle 
     print "first line of data from file: "+handle.readline() 

    def filesave(self): 
     if (self.lastsave): 
      self.lastsave.write("Save: Some data to save into the file\n") 
     elif (self.lastopen): 
      self.lastopen.write("Save: Some data to save into the file\n") 
     else: 
      handle = open('quiz_spec.py', 'w') 
      handle.write("Save: This is the new content of test.txt :-)") 

    def filesaveas(self): 
     handle = asksaveasfile(mode = 'w', defaultextension = '.py') 
     print "name of file you picked = "+str(handle.name) 
     self.lastsave = handle 
     handle.write("SaveAs: Some data to save into the file\n") 
+0

幸い私の友人ですか? –

答えて

3

fileopenfilesaveの機能が終了した後も引き続き確認しましたか?この方法をデバッグするのは非常に簡単で、試してみてください。

my_man = FileMan() 
my_man.fileopen() 
my_man.filesave() 
print my_man.lastopen 
print my_man.lastsave 

を、これは動作しない場合は、この結果にあなたの質問を更新してみてください、私たちはそこからそれを取るでしょう。また、次の点を確認する必要があります。

print my_man.lastopen == False and my_man.lastsave == False 
+0

私はこれを試して、値は永続的で、2つのFalseチェックはfalseを返します。 – Pax

2

私はそれを理解しましたが、私はファイルを閉じていませんでした。愚かな私。

関連する問題