我试图让一个装满气球的窗口一个接一个地点击(点击它),使用python2,但是在这一刻我可以抓住我的鼠标事件时我很困惑,我没有点击任何内容,代码已附加。我受到以下代码的启发: http://effbot.org/zone/tkinter-canvas-find-withtag.htm, 但我试图做自己的安排。
我对Python类,属性和事件的相关性有点困惑。谢谢你的想法
class Baloons:
def __init__(self,wdw, dimension):
self.canvas= Canvas(wdw, width=dimension, height=dimension)
self.canvas.pack()
self.update(self.canvas)
self.click2(self.canvas)
def click2(event, canvas):
if canvas.find_withtag(CURRENT):
canvas.itemconfig(CURRENT, state="hidden")
canvas.update_idletasks()
canvas.after(200)
canvas.delete("all")
canvas.itemconfig(CURRENT, fill="red")
self.update(canvas)
self.click1(canvas)
def update(self,canvas):
for i in range(200):
x, y = randint(0, 400-1), randint(0, 400-1)
canvas.create_oval(x-5, y-5, x+5, y+5, fill="red")
def click1(self,canvas):
canvas.bind("<Button-1>", click2(canvas))
if __name__ == "__main__":
root=Tk()
dimension = 200
b=Baloons(root,dimension,delay)
root.mainloop()
答案 0 :(得分:0)
我试图让一个装满气球的窗户一个接一个地消失(点击它)
这不是您的代码尝试做的事情。你的代码隐藏它,破坏一切,试图配置你已经销毁的东西,然后重新创建新的对象。
要回答如何通过点击它们使气球消失的问题,你可以扔掉大约四分之一的代码。
以下是一个有效的例子。大多数情况下,我只是重新实现click2
以删除与删除光标下项目无关的所有代码。我还删除了click1
,因为我没有看到任何理由将绑定放入函数中。您只需要设置一次绑定。
我还删除了传递canvas
的必要性。由于您正在使用对象,因此每种方法都有一种访问画布的方法。
from Tkinter import *
from random import randint
class Baloons:
def __init__(self,wdw, dimension):
self.canvas= Canvas(wdw, width=dimension, height=dimension)
self.canvas.pack()
self.update()
self.canvas.bind("<Button-1>", self.click2)
def click2(self, event):
item = self.canvas.find_withtag(CURRENT)
if item:
self.canvas.delete(item)
def update(self):
for i in range(200):
x, y = randint(0, 400-1), randint(0, 400-1)
self.canvas.create_oval(x-5, y-5, x+5, y+5, fill="red")
if __name__ == "__main__":
root=Tk()
dimension = 200
b=Baloons(root,dimension)
root.mainloop()