尝试使用键绑定时出现 Tkinter/Canvas 类型错误
Posted
技术标签:
【中文标题】尝试使用键绑定时出现 Tkinter/Canvas 类型错误【英文标题】:Tkinter/Canvas typeError when attempting to use keybinds 【发布时间】:2021-09-13 23:28:43 【问题描述】:Python 新手。我正在为汽车需要能够加速/减速的课程做作业。尝试使用键绑定时,我收到以下 typeError:
TypeError:speedUp() takes 0 positional arguments but 1 was given
我尝试在定义 speedUp/slowDown 之前放置 @staticmethod,但它返回了一个未定义的单独错误。我觉得我错过了语法或位置问题?任何帮助表示赞赏。
def main():
root = tk.Tk()
root.title = ("Race Car")
canvas = tk.Canvas(root, width=600, height=400, bg="white")
canvas.pack()
# starting at position
x = 0
y = 300
def displayCar():
# First Wheel
canvas.create_oval(x + 10,y - 10, x + 20, y, fill="black", tags="car")
# Second Wheel
canvas.create_oval(x + 30, y - 10, x + 40, y, fill="black", tags="car")
# Body
canvas.create_rectangle(x, y - 20,x + 50,y - 10, fill="blue", tags="car")
displayCar()
instructions=tk.Label(root, text="To speed up the car, press the up arrow. To slow down, press the down arrow.").pack()
# movement speed
dx = 5
sleeptime = 100
width = 600
def speedUp():
if sleepTime>5:
sleepTime-=20
print("Speeding up")
def slowDown():
sleepTime+=20
print("slowing down")
canvas.bind("<Up>", speedUp)
canvas.bind("<Down>", slowDown)
canvas.focus_set()
while True:
canvas.move("car", dx,0)
canvas.after(100)
canvas.update()
if x < width:
x+=dx
else:
x=0
canvas.delete("car")
displayCar()
canvas.mainloop()
main()
【问题讨论】:
【参考方案1】:speedUp
和 slowDown
方法总是使用来自 Tkinter (see the docs) 的 event
参数调用。
即使您不需要该值,也将其添加到方法签名中。这是最简单的修复方法。
def speedUp(event):
if sleepTime>5:
sleepTime-=20
print("Speeding up")
def slowDown(event):
sleepTime+=20
print("slowing down")
(参数名无所谓)
【讨论】:
以上是关于尝试使用键绑定时出现 Tkinter/Canvas 类型错误的主要内容,如果未能解决你的问题,请参考以下文章