2016-12-03 152 views
-1

我正在python 3.5中創建註銷程序。我一直在環顧四周,看到如何使用「關閉/退出/退出」按鈕關閉窗口。我想要做的就是在點擊「提交」按鈕後,自動關閉窗口,將輸入框中的文本發送到文件。我試圖以不同的方式在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全球,然後當我加入win3.destroy()到write_to_file所以點擊按鈕後會關閉窗口。如果你不使它成爲全局的,你會得到一個NameError:'win3'沒有被定義。

我刪除了def close_win(self):section。

改正的代碼:

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 

編輯看到@gms評論之後,我刪除了global並添加self.到WIN3條目。我編輯了上面的代碼來顯示更正。

0

你必須銷燬win3窗口而不是條目。只需在def write_to_file(self)末尾寫上 win3.destroy()即可。

您可以銷燬窗口(如根窗口或作爲根窗口孩子的Toplevel窗口),而不是窗口的窗口小部件。銷燬根窗口會銷燬所有窗口並退出程序。

在高清close_win(個體經營)你正試圖摧毀耳鼻喉科項,而不是它的父窗口WIN3

+0

當我將它添加到def的末尾時,出現NameError:'win3'未定義。我是否需要添加一些內容,以便在__init__部分查找它?我試圖添加自我,但我然後得到一個AttributeError:'Writefiles'對象沒有屬性'win3'。 – poncanach

+0

抱歉,延遲。我沒有看到這個問題...... 您使用win3 = Tk(),並將其稱爲win3。您必須在類的定義中使用self.win3。所以將類中的所有win3改爲self.win3。另外我不確定你是否需要全局win3 – gms

+0

這兩種方式都有效,但我現在明白使用'self'是python的方式,所以我將它添加到了班級中的所有win3中,並刪除了全局。謝謝 – poncanach