我在tkinter程序中使用datetime时遇到问题。 问题看起来就在这一行:
user = Person('User', datetime.date(int(year_entry.get())), (int(month_entry.get())), (int(day_entry.get())))
完整代码:
import datetime
import tkinter as tk
# GUI
window = tk.Tk()
window.geometry('200x400')
window.title('Age calculator')
info_label = tk.Label(text='Calculate your age!')
info_label.grid(column=1, row=0)
year_label = tk.Label(text='Year')
year_label.grid(column=0, row=1)
month_label = tk.Label(text='Month')
month_label.grid(column=0, row=2)
day_label = tk.Label(text='Day')
day_label.grid(column=0, row=3)
year_entry = tk.Entry()
year_entry.grid(column=1, row=1)
month_entry = tk.Entry()
month_entry.grid(column=1, row=2)
day_entry = tk.Entry()
day_entry.grid(column=1, row=3)
def calculate_age():
print(year_entry.get())
print(month_entry.get())
print(day_entry.get())
user = Person('User', datetime.date(int(year_entry.get())), (int(month_entry.get())), (int(day_entry.get())))
print(user.age())
print('klick!')
text_answer = tk.Text(master=window, height=20, widt=30)
text_answer.grid(column=1, row=5)
text_answer.insert(tk.END, 'Banana!')
calc_button = tk.Button(text='Calculate!', command=calculate_age)
calc_button.grid(column=1, row=4)
class Person:
def __init__(self, name, birthdate):
self.name = name
self.birthdate = birthdate
def age(self):
today = datetime.date.today()
age = today.year - self.birthdate.year
return age
window.mainloop()
我只是在条目中放入1 2和3,然后在GUI中按下“计算”。
错误代码: 1 2 3 Tkinter回调中的异常 Traceback(最近一次调用最后一次): 文件“C:\ Users \ jimmy \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ tkinter__init __。py”,第1699行,调用 return self.func(* args) 在calculate_age中输入文件“C:\ Users \ jimmy \ Programming \ Apps_OOP \ calculator_app.py”,第35行 user = Person('User',datetime.date(int(year_entry.get())),(int(month_entry.get())),(int(day_entry.get()))) TypeError:未找到必需参数'month'(pos 2)
请帮忙!
答案 0 :(得分:1)
错误出现在这段代码中:
datetime.date(int(year_entry.get()))
如果计算括号,您会看到正在关闭对datetime.date
的调用。因此,错误表明您没有包含必需的参数。
这个bug很难看到,因为你试图在一行代码中做太多。您应该使用临时变量来存储条目小部件中的值,然后将变量用作datetime.date
的参数
例如:
year = int(year_entry.get())
month = int(month_entry.get())
day = int(month_entry.get())
date = datetime.date(year, month, day)
user = Person('User', date)
这是更多的代码行,但更重要的是它更多的可读代码行。此外,您还可以更轻松地打印传递给函数的实际值。
答案 1 :(得分:0)
将第35行改为:
user = Person('User', datetime.date(int(year_entry.get()), int(month_entry.get()), int(day_entry.get())))