2016-12-03 11 views
-1

私はpython 3.5でサインアウトプログラムを作成しています。私は周りを見回しており、 "閉じる/終了/終了"ボタンを使用してウィンドウを閉じる方法を見てきました。私がしたいことは、「送信」ボタンをクリックしてENTRYボックスのテキストをファイルに送ると、自動的にウィンドウを閉じることです。 write_to_fileに.destroy()を別の方法で追加しようとしましたが、定義されていないというエラーが出ています。私は見たいくつかの例のようにそれのためのdefを作成しましたが、私はwrite_to_fileを呼び出す方法を知らない。プログラムは、エントリボックスにあるものをファイルに正しく書き込みます。どんな助けもありがとう。送信ボタンをクリックした後、tk ENTRYウィンドウを自動的に閉じる

class Writefiles: 

    def __init__(self): 
     win3 = Tk() 
     win3.title('Signature') 
     win3['bg'] = 'blue' 
     win3.geometry('300x200') 
     center(win3) 

     self.VarEnt = StringVar() 

     self.lab = Label(win3, text = "Name") 
     self.lab.grid(padx = 10, pady = 10) 

     self.ent = Entry(win3, textvariable = self.VarEnt, bd = 5, width = 45) 
     self.ent.focus() 
     self.ent.grid(padx = 10, pady = 10) 

     self.btn = Button(win3, text = 'Submit', width = 10, height = 2, background = 'gold', command = self.write_to_file) 
     self.btn.grid(padx = 10, pady = 10) 


    def write_to_file(self): 

     date = datetime.now().strftime(' %Y-%m-%d %H:%M:%S') 

     with open('sig.txt', 'a') as f: 
      f.write(self.ent.get() + date + '\n') 
      f.close() 


    def close_win(self):  # close tkinter window 
     self.ent.destroy() 
+0

実際にウィンドウを閉じるには、そのウィンドウで 'destroy()'を呼び出します。エラーが発生した場合は、そのエラーを投稿する必要があります。 –

答えて

0

耳鼻咽喉科のエントリではなく、その親ウィンドウWIN3を破壊しようとしていますボタンをクリックするとウィンドウが閉じます。グローバル化しないとNameErrorが得られます: 'win3'は定義されていません。

def close_win(self):セクションを削除しました。

訂正コード:

class Writefiles: 

def __init__(self): 
    self.win3 = Tk() 
    self.win3.title('Signature') 
    self.win3['bg'] = 'blue' 
    self.win3.geometry('300x200') 
    center(self.win3) 

    self.VarEnt = StringVar() 

    self.lab = Label(self.win3, text = "Name") 
    self.lab.grid(padx = 10, pady = 10) 

    self.ent = Entry(self.win3, textvariable = self.VarEnt, bd = 5, width = 45) 
    self.ent.focus() 
    self.ent.grid(padx = 10, pady = 10) 

    self.btn = Button(self.win3, text = 'Submit', width = 10, height = 2, background = 'gold', command = self.write_to_file) 
    self.btn.grid(padx = 10, pady = 10) 


def write_to_file(self): 

    date = datetime.now().strftime(' %Y-%m-%d %H:%M:%S') 

    with open('sig.txt', 'a') as f: 
     f.write(self.ent.get() + date + '\n') 
     f.close() 

    self.win3.destroy() # to close window after files is written 

EDIT @gms見てコメントした後、私はglobalを取り除き、WIN3エントリへself.を追加しました。私は上記のコードを修正して表示しました。

0

あなたはエントリではなくwin3ウィンドウを破壊する必要があります。 def write_to_file(self)の最後に win3.destroy()を書きます。

ウィンドウのウィジェットではなく、ルートウィンドウやルートウィンドウの子であるトップレベルウィンドウのようなウィンドウを破壊することができます。ルートウィンドウを破壊すると、すべてのウィンドウが破棄され、プログラムが終了します。デフclose_win(自己)で

は、私はそれようwrite_to_fileにwin3.destroy()を追加したとき、私はその後、WIN3はグローバルで行うために必要な

+0

defの最後に追加すると、NameErrorが発生します。 'win3'は定義されていません。 __init__セクションでそれを探すために何かを追加する必要がありますか?私は自己追加しようとしましたが、次にAttributeErrorを取得します。 'Writefiles'オブジェクトには属性 'win3'がありません。 – poncanach

+0

遅れて申し訳ありません。私は質問が表示されませんでした... あなたはwin3 = Tk()を使用し、それをwin3と呼んでいます。クラスの定義の中でself.win3を使用する必要があります。だからクラス内のすべてのwin3をself.win3に変更してください。また、私はあなたがグローバルwin3をすべて必要としているかどうか分かりません。 – gms

+0

両方の方法で動作しますが、私は今、 'self'を使うのがPythonの方法だと理解しています。ありがとう – poncanach

関連する問題