Python Classes执行命令的顺序

时间:2016-04-28 17:42:38

标签: python class tkinter

我试图让一个装满气球的窗口一个接一个地点击(点击它),使用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()

1 个答案:

答案 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()