【问题标题】:Python Classes order of executing thingsPython 类的执行顺序
【发布时间】:2016-04-28 17:42:38
【问题描述】:

我正在尝试使用 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()

【问题讨论】:

  • 你的问题在哪里?

标签: python class tkinter


【解决方案1】:

我试图让一个装满气球的窗口一个接一个消失(点击它)

这不是您的代码想要做的。您的代码正在隐藏它,销毁所有内容,尝试配置您已销毁的内容,然后重新创建新对象。

要回答如何通过单击使气球消失的问题,您可以丢弃大约四分之一的代码。

以下是一个工作示例。大多数情况下,我只是重新实现了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()

【讨论】:

  • 感谢您的回复和耐心等待。您如何看待使用画布小部件作为气球大小、速度和颜色的控制面板,我正在检查如何避免在主根窗口之外创建另一个窗口,您有什么建议?再次感谢
猜你喜欢
  • 2019-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多