2017-07-29 6 views
1

私はゆっくりと大きくなるので、私は遅延を追加する必要がある円を作ろうとしています。私はtime.sleep()を使ってみましたが、それはうまくいかず、.after()を使う必要があることが分かりました。私はサークルを作る機能を作ろうとしましたが、うまくいきませんでした。私は楕円が作成される前にラムダを追加しようとしましたが、それはどちらもうまくいきませんでした。とにかく新しいサークルが作成される前に遅延を追加できますか?おかげさまで python 3 tkinter:グラフィックに.after()を追加する方法

私のコード: -

from tkinter import * 
root = Tk() 

c = Canvas(root, width = 500, height = 500) 
c.pack() 

oval = c.create_oval(0, 0, 1, 1) 

for x in range(2, 200, 5): 
    c.delete(oval) 
    root.after(100, oval = c.create_oval(0, 0, x, x)) 

答えて

1

root.after()は、ミリ秒の遅延とその遅延後に実行する機能を取ります。あなたがしようとしているのは、遅れた後に、x(円の半径)のパラメータを持つ関数を実行することです。この問題は、入力付きの関数を実行するように求めることができないことです。この問題を回避するには

、あなたは円の半径の更新機能を使用して、グローバル変数ができなど

これが私の仕事:

from tkinter import * 
root = Tk() 

c = Canvas(root, width = 500, height = 500, highlightthickness = 0) 
c.pack() 

oval = c.create_oval(0, 0, 1, 1) 
r = 2 

def update(): 
    global r, oval 
    if x < 200: 
     x += 5 
    c.delete(oval) 
    oval = c.create_oval(0, 0, r, r) 
    root.after(100, update) 

update() 
root.mainloop() 

私も=オプションhighlightthicknessを追加しました0をキャンバスに追加する必要があります。そうしないと、座標系が一致せず、サークルがキャンバスからオーバーフローします。

+0

こんにちは、おかげで、私の問題は解決しました。また、root.mainloop()は何をしますか? – Regi

+0

tkinterはGUIであるため、プライム計算プログラムとは異なります。プライム計算プログラムでは、結果が得られるまでステップを辿ります。 Tkinterはインターフェイスなので、いつも準備ができていなければならず、ユーザーのマウスクリックやキー押下などのために定数ループ(root.mainloop)で待機している必要があります。 また、私の解決策で問題を修正しましたので、 。 –

関連する問題