2016-04-28 42 views
-1

我想讓一個充滿氣球的窗口逐個消失(點擊它),使用python2,但我有點困惑,我可以捕獲我的鼠標事件,在這一刻,我沒有點擊任何東西,代碼被附上。我受到以下代碼的啓發: http://effbot.org/zone/tkinter-canvas-find-withtag.htm, 但我試圖做我自己的安排。Python類執行事物的順序

我有點困惑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

我試圖做一個窗口全氣球消失一個接一個(點擊它)

那不是你的代碼試圖做。你的代碼隱藏它,摧毀一切,試圖配置你已經銷燬的東西,然後重新創建新的對象。

要回答如何通過點擊它們使氣球消失的問題,您可以扔掉大約四分之一的代碼。

以下是一個工作示例。大多數情況下,我只是重新執行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() 
+0

感謝您的迴應和耐心。你怎麼看待使用canvas小部件作爲控制面板的大小,速度和氣球的顏色,我正在檢查如何避免在主根窗口之外創建另一個窗口,你推薦什麼?再次感謝 – lmarin