这是我的第一个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)
谢谢大家!
答案 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}},尽管我建议尽可能避免使用全局变量。