Python Tkinter GUI:“清除结果”按钮不起作用

时间:2016-11-26 02:52:36

标签: python button tkinter

这是我的第一个python程序。我正在尝试创建torricelli的排水时间计算器,但“清晰结果”按钮不起作用。我想要它清除计算结果。

我收到此错误:

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)

谢谢大家!

2 个答案:

答案 0 :(得分:2)

尝试使用textvariable作为标签。我还建议您为您的程序使用Class。

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的字符串变量并使用按钮传递它们。

答案 1 :(得分:0)

您的变量drain_label不是global,因此该函数无法在任何地方查看其定义/声明,请尝试将drain_label作为参数传递给您的函数或制作{ {1}},尽管我建议尽可能避免使用全局变量。