2016-11-26 252 views
-1

這是我的第一個python程序。我正在嘗試創建torricelli的排空時間計算器,但「清除結果」按鈕不起作用。我想要它清除計算結果。Python Tkinter GUI:'清除結果'按鈕不起作用

我得到這個錯誤:

Traceback (most recent call last): 
    File "C:\Users\David \Desktop File\GUI_DrainTime_Calculator.py", line 83, in clear 
    drain_label.destroy() 
NameError: name 'drain_label' is not defined 

請幫我弄清楚爲什麼這個NameError仍然存在。 這是罪魁禍首:

drain_label = Label(
    WIN, 
    font=('Helvetica', 8, 'bold'), 
    text="The time it takes for the liquid to drain is: %.0f hour, %.0f minutes, and %.0f seconds." % (hr, Min, sec)).pack(side=BOTTOM) 

def clear(): 
    drain_label.destroy() 
    Clearbtn = Button(WIN, text="Clear Results", font('Helvetica',7,'bold'), fg='black',command=clear) 
    Clearbtn.configure(background='grey') 
    Clearbtn.pack(side=TOP,pady=5) 

謝謝大家!

回答

0

你的變量drain_labelglobal,因此功能無法看到它的定義/聲明的任何地方,嘗試通過drain_label作爲參數在函數或使其global,但我建議避免使用全局變量儘可能。

2

嘗試使用textvariable作爲標籤。我也推薦你的程序使用一個類。

import tkinter as tk 
from tkinter import ttk 

class Calculator: 
    def __init__(self, master): 

     frame = tk.Frame(master) 

     self.text_var = tk.StringVar() 
     hr, min, sec = 1, 4, 20 
     text = 'drain time = %.0f Hr, %0f Min, %.0f Sec' % (hr, min, sec) 

     drain_label = ttk.Label(frame, textvariable=self.text_var).pack() 

     clear_button = ttk.Button(frame, text='clear', command=self.destroy).pack() 

     frame.pack() 

    def destroy(self): 
     self.text_var.set('') 

root = tk.Tk() 
app = Calculator(root) 
root.mainloop() 

可以使用tk.StringVar().get().set()方法一起獲取和設置字符串變量。你也可以使用hr, min, sec的字符串變量,並使用按鈕傳遞這些變量。