我使用tkinter
,试图使一个球出现在屏幕上,然后在单击“ w”键时消失(变成与背景相同的颜色),但是在运行程序时它会立即消失
我认为这可能是由于代码的结构所致,函数ball_disappear
在变量之前,但是当我将函数放在变量下面时,我没有发现任何区别。这是代码。
from tkinter import *
root = Tk()
height = 700
width = 1000
canvas = Canvas(width=width, height=height)
canvas_background = '#63fff9'
canvas.configure(background=canvas_background)
root.title = "Ball Bouncer Tk"
def ball_disappear():
canvas.itemconfig(ball, fill=canvas_background, outline=canvas_background)
canvas.update()
ballP1 = 400
ballP2 = 400
ballP3 = 600
ballP4 = 600
ball = canvas.create_oval(ballP1, ballP2, ballP3, ballP4, fill='#000000', tags="ball")
canvas.pack()
canvas.bind("w", ball_disappear())
canvas.mainloop()
答案 0 :(得分:3)
考虑以下代码行:
canvas.bind("w", ball_disappear())
它具有与此完全相同的效果:
result = ball_disappear()
canvas.bind("w", result)
绑定事件时,必须给它一个 callable 。通常,它以对函数的引用的形式出现,尽管它也可能是对lambda
或functools.partial
的调用的结果,或者甚至是您自己的函数(如果该函数返回另一个函数)的结果。
因此,绑定ball_disappear
的正确方法如下:
canvas.bind("w", ball_disappear)
但是,由于您的代码中还有其他两个错误,您的代码仍然无法使用。
首先,画布默认情况下不获取键盘事件。您必须明确为其指定键盘焦点,因此在创建画布后的某个时候需要执行以下操作:
canvas.focus_set()
第二,当您将函数绑定到事件时,将向调用该函数的对象传递有关事件的信息。因此,即使您不打算在代码中使用参数,也需要像下面那样定义函数:
def ball_disappear(event):