2016-04-28 27 views
-1

私は、バルーンがいっぱいになっているウィンドウをpython2を使って1つずつ(クリックして)消えさせようとしていますが、私はマウスイベントをキャプチャできるところで少し混乱しています。この瞬間、私は何もクリックしていない、コードが添付されています。私はコードで触発されています: 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

私は風船の窓をいっぱいにしようとしていてくれてありがとう消え一つずつあなたのコードをしようとしているされていないものを(それをクリック)

行う。あなたのコードは、すべてを破壊し、あなたが破壊したものを設定しようとしてから、新しいオブジェクトを作り直しています。

バルーンをクリックして消す方法の質問に答えるには、コードの約4分の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() 
+0

あなたの応答と忍耐力に感謝します。あなたは、ボールペンのサイズ、スピード、色のコントロールパネルとしてキャンバスウィジェットを使用することについてどう思いますか、私はメインルートウィンドウの外に別のウィンドウを作成するのを避ける方法をチェックしています。再度、感謝します – lmarin