2016-11-26 101 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的字符串变量,并使用按钮传递这些变量。