【发布时间】:2021-07-06 20:29:39
【问题描述】:
我正在尝试完成从入门到使用 Python 编程的家庭作业。 它希望我能够使用向上和向下键分别增加和减少速度。我有汽车的启动(我仍然需要完成形状),我有一个按钮来启动和停止汽车,它工作正常。但是,当我尝试使用书中的示例(increaseSpeed 和 reductionSpeed 函数)运行它时,它给了我“TypeError:increaseSpeed() 需要 1 个位置参数,但给出了 2 个”。我不知道如何在我的代码中纠正这个问题,它开始让我感到沮丧。这本书甚至没有告诉你为什么它使用 sleepTime 来提高它最初用于示例的消息的速度。
from tkinter import *
class controlAnimation:
def __init__(self):
window = Tk()
window.title("Racing Car")
self.width = 250
self.height = 100
self.canvas = Canvas(window, bg="white", width=self.width, height=self.height)
self.canvas.pack()
frame = Frame(window)
frame.pack()
btStop = Button(frame, text = "Stop", command = self.stop)
btStop.pack(side=LEFT)
btStart = Button(frame, text = "Start", command = self.start)
btStart.pack(side=RIGHT)
self.x=0
self.sleepTime = 100
self.canvas.create_rectangle(self.x,90,self.x+60,80,fill="black", tags = "car")
self.canvas.create_oval(self.x+10, 90, self.x+20, 100, fill = "black",tags = "car")
self.dx=3
self.isStopped = False
self.animate()
window.bind("<Up>", self.increaseSpeed)
window.bind("<Down>", self.decreaseSpeed)
window.mainloop()
def stop(self):
self.isStopped = True
def start(self):
self.isStopped = False
self.animate()
def increaseSpeed(self):
if self.sleepTime>5:
self.sleepTime-=20
def decreaseSpeed(self):
self.sleepTime+=20
def animate(self): # Move the message
while not self.isStopped:
self.canvas.move("car", self.dx,0)
self.canvas.after(self.sleepTime)
self.canvas.update()
if self.x < self.width:
self.x += self.dx
else:
self.x = 0
self.canvas.create_rectangle(self.x-60,90,self.x,80,fill="black", tags = "car")
self.canvas.create_oval(self.x-50, 90, self.x-40, 100, fill = "black",tags = "car")
controlAnimation()
【问题讨论】:
-
.bind函数返回事件,所以你可以做的只是添加另一个参数到increaseSpeed和decreaseSpeed函数,例如像这样increaseSpeed(self, event=None)和decreaseSpeed(self, event=None)或没有None部分(我认为没有必要设置为无)所以这样可能更紧凑:increaseSpeed(self, event)。您不必在函数中使用该参数 -
我还建议遵循 PEP 8 并使用
snake_case作为变量和函数名,使用CapitalCase作为类名
标签: python animation tkinter methods typeerror