[英]TypeError: missing 3 required positional arguments
我正在做一个编码 class 作业,我试图编写一些代码来告诉你任何给定日期是星期几。
#importing tkinter and creating a window pop up
import tkinter
window = tkinter.Tk()
#titling the window
window.title("day of the week on any given date")
#add widgets here
canvas = tkinter.Canvas(window, bd=3, height=500, width=500)
#making a border
xy_black = 500, 500, 500, 10, 10, 10, 10, 500
border1 = canvas.create_polygon(xy_black, fill="black")
xy_white = 495, 495, 495, 15, 15, 15, 15, 495
border2 = canvas.create_polygon(xy_white, fill="white")
canvas.pack()
#year
entry1 = tkinter.Entry (window)
canvas.create_window(150, 70, window=entry1)
labelyear = tkinter.Label(window, text= 'Enter any year' ,font=('helvetica', 10))
canvas.create_window(110, 40, window=labelyear)
#month
entry2 = tkinter.Entry (window)
canvas.create_window(150, 140, window=entry2)
labelmonth = tkinter.Label(window, text= 'Enter any month (0-12)' ,font=('helvetica', 10))
canvas.create_window(110, 110, window=labelmonth)
#day
entry3 = tkinter.Entry (window)
canvas.create_window(250, 70, window=entry3)
labelday = tkinter.Label(window, text= 'Enter a day' ,font=('helvetica', 10))
canvas.create_window(220, 40, window=labelday)
def getDay(d, m, y):
y = entry1.get()
x1 = int(y)
m = entry2.get()
x2 = int(m)
d = entry3.get()
x3 = int(d)
t = [ 0, 3, 2, 5, 0, 3,
5, 1, 4, 6, 2, 4 ]
y -= m < 3
return (( x1 + int(x1 / 4) - int(x1 / 100)
+ int(x1 / 400) + t[x2 - 1] + x3) % 7)
day = getDay(x3, x2, x1)
print(day)
button1 = tkinter.Button(text= 'submit', command=getDay)
canvas.create_window(200, 180, window=button1)
我一直收到这个错误
Exception in Tkinter callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/tkinter/__init__.py", line 1892, in __call__
return self.func(*args)
TypeError: getDay() missing 3 required positional arguments: 'd', 'm', and 'y'
我该如何解决错误? 我试过在很多地方添加 arguments,甚至无法弄清楚错误的含义。 无论如何,我不知道还能说什么,但我的帖子主要是代码,所以它让我添加更多细节
当您将 get_day function 作为 Button 部分中的命令传递时,当时它只调用 function 并且您没有将任何 arguments 传递给它所以基本上您必须使用 partial from functools import the partial 并且您应该必须传递命令使用部分 like as
button1 = tkinter.Button(text='submit', command=partial(get_day,x1,x2,x3))
您的 function 被定义为需要三个参数:
def getDay(d, m, y):
就像错误所说的那样,你在这里用零参数调用它,因为你没有指定任何 arguments 作为command
定义的一部分:
button1 = tkinter.Button(text= 'submit', command=getDay)
如果您希望能够调用带有或不带参数的 function,请将它们设为可选:
def getDay(d=None, m=None, y=None):
d = d if d is not None else int(entry3.get())
m = m if m is not None else int(entry2.get())
y = y if y is not None else int(entry1.get())
...
或者,永远不需要参数并始终从条目小部件中获取值:
def getDay():
d = int(entry3.get())
m = int(entry2.get())
y = int(entry1.get())
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.