我正在尝试创建一个小部件,用于计算非续订日期的通知。基本上,从到期日减去非续约天数的通知,并通过点击按钮生成输出。
我收到以下错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Abraham Valencia\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 1699, in __call__
return self.func(*args)
File "C:\Users\Abraham Valencia\Desktop\Python Learning Folder\test1.py", line 50, in result
result = datetime.date(date - days)
NameError: name 'date' is not defined
我的代码如下:
import tkinter as tk
from datetime import datetime, timedelta
class Application(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.master = master
master.title("Trade Finance")
master.minsize(width=250, height=200)
master.maxsize(width=250, height=200)
self.date = None
#Input of expiry date
label = tk.LabelFrame(master, text = "Input", bd = 2, font='none 8 italic')
label.pack()
tk.Label(label, text="Expiry Date (YYYY-MM-DD)",font = 'none 10').pack()
self.userinput1 = tk.StringVar()
tk.Entry(label,textvariable = self.userinput1).pack()
#Input of non-renewal days
tk.Label(label, text="Non-Renewal Days",font = 'none 10').pack()
self.userinput2 = tk.StringVar()
tk.Entry(label, textvariable = self.userinput2).pack()
#output results
label_1 = tk.LabelFrame(master, text = "Output", bd = 2, font='none 8 italic')
label_1.pack()
tk.Label(label_1,text= 'Review Date',font= 'none 10').pack()
button = tk.Button(label_1, text="Calculate", fg ='white', bg = 'black',font= 'none 10 bold',command=self.result).pack()
tk.Entry(label_1, textvariable = self.result).pack()
def expiry(self):
while True:
date = self.userinput1.get()
try:
return datetime.strptime(date, '%Y-%m-%d')
except ValueError:
print('Please follow the date format')
def notice_days(self):
ndays = self.userinput2.get()
return timedelta(days=ndays)
def result(self):
result = datetime.date(date - days)
return result
if __name__=='__main__':
root = tk.Tk()
app = Application(root)
app.mainloop()
我知道为什么会遇到这种类型的错误,或者我错过了一些未正确声明的内容。感谢您的反馈。
答案 0 :(得分:0)
问题描述:
您在方法https://graph.facebook.com/v2.9/t_mid.$cAASnBD_EQdhjNJRBZVdA0750e5Q_/messages?fields=id,message,from,to&access_token=<page_access_token>
中声明了日期。
由此,日期范围是方法expiry
。
您尝试访问方法expiry
中的日期,在此方法中您尚未声明日期(result
方法的日期在expiry
方法之外的其他范围内)。
<强>解决方案:强>
为了解决这个问题,您可以将日期变量设为类的数据成员。
怎么做?
在result
方法中声明日期:
__init__
在self.data = None
方法中使用它:
expiry
方法self.date = self.userinput1.get()
:
result
我建议你阅读here
中有关python范围的内容答案 1 :(得分:0)
您需要在with tf.Graph().as_default():
函数中使用self.date:
result
然而,这仍然会引发错误,因为:
a)def result(self):
result = datetime.date(self.date - days)
return result
初始化为无,并且从未更改为数字
b)self.date
未定义(我在代码的其他地方看不到它的引用)。
此代码的预期行为是什么?