尝试使用键绑定时出现 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】:

speedUpslowDown 方法总是使用来自 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 类型错误的主要内容,如果未能解决你的问题,请参考以下文章

使用管道时出现属性绑定错误

尝试添加外键时出现mysql错误

为啥在尝试将 Angular 父组件的属性绑定到子组件时出现此错误?

tkinter Canvas 实现拖曳与缩放功能

在依赖属性 WPF 上使用绑定时出现问题 [重复]

为 Xamarin 创建 Android 绑定时出现问题