(Tkinter)オブジェクトを配置した後にアニメーションを実行するにはどうすればよいですか?

エンジェルオクタビオパラダフローレス

tkinterを学ぼうとしていますが、ボールのアニメーションを見つけました(このWebサイトで)。

マウスで配置できるボールに改造してみました。今までその最初の部分をやりましたが、ムーブメントを追加する方法がわかりません。ボールの座標を取得するには、アニメーションのコードの前にキャンバスを実行する必要があると思います。

import tkinter 
import time


animation_window_width=800
animation_window_height=600
animation_ball_radius = 30
animation_ball_min_movement = 5
animation_refresh_seconds = 0.01

def animate_ball(window, canvas, xinc, yinc, ball):

    while True:
        canvas.move(ball,xinc,yinc)
        window.update()
        time.sleep(animation_refresh_seconds)
        ball_pos = canvas.coords(ball)
        xl,yl,xr,yr = ball_pos
        if xl < abs(xinc) or xr > animation_window_width-abs(xinc):
            xinc = -xinc
        if yl < abs(yinc) or yr > animation_window_height-abs(yinc):
            yinc = -yinc


def position_ball(event): 
    ball = canvas.create_oval(event.x-animation_ball_radius,
               event.y-animation_ball_radius,
               event.x+animation_ball_radius,
               event.y+animation_ball_radius,
               fill="blue", outline="white", width=4)
    
window = tkinter.Tk()
window.title("Tkinter Animation Demo")
window.geometry(f'{animation_window_width}x{animation_window_height}')
canvas = tkinter.Canvas(window)
canvas.configure(bg="black")
canvas.pack(fill="both", expand=True)
ball=canvas.bind("<Button-1>", position_ball)
ball 

#animate_ball(window, canvas, animation_ball_min_movement, animation_ball_min_movement, ball)
小説

それは本当に悪い例です。ほとんどのGUIsleep()では、GUIメインループをブロックするため、GUIスレッドで無限ループを使用しないでください(pygameはこれに対する注目すべき例外です)。tkinterを含むほとんどのGUIは「イベント駆動型」であり、何かを行うにはイベントを使用する必要があります。あなたが欲しいと思うイベントはマウスの動きです。イベントにはマウスのx、y位置が含まれるため、あとはそれをボールに転送するだけです。

import tkinter

animation_window_width=800
animation_window_height=600
animation_ball_radius = 30
animation_ball_min_movement = 5
animation_refresh_seconds = 0.01

def place_ball(event):
    canvas.unbind("<Motion>") # stop responding to motion
    canvas.xinc = animation_ball_min_movement
    canvas.yinc = animation_ball_min_movement
    animate_ball()

def locate_ball(event):
    canvas.coords(ball,
        event.x-animation_ball_radius,
        event.y-animation_ball_radius,
        event.x+animation_ball_radius,
        event.y+animation_ball_radius)

# Create and animate ball in an infinite loop
def animate_ball(event=None):
    canvas.move(ball,canvas.xinc,canvas.yinc) # move the ball
    xl,yl,xr,yr = canvas.coords(ball) # get current coordinates

    if xl < abs(canvas.xinc) or xr > animation_window_width-abs(canvas.xinc):
      canvas.xinc = -canvas.xinc
    if yl < abs(canvas.yinc) or yr > animation_window_height-abs(canvas.yinc):
      canvas.yinc = -canvas.yinc

    canvas.coords(ball, xl,yl,xr,yr) # set new coordinates

    canvas.after(20, animate_ball) # set the loop event

window = tkinter.Tk()
window.title("Tkinter Animation Demo")
window.geometry(f'{animation_window_width}x{animation_window_height}')
canvas = tkinter.Canvas(window)
canvas.configure(bg="black")
canvas.pack(fill="both", expand=True)
ball = canvas.create_oval(0,0,0,0,fill="blue", outline="white", width=4)
canvas.bind('<Motion>', locate_ball)
canvas.bind('<Button-1>', place_ball)
window.mainloop()

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

JavaScriptでアニメーションの後にオブジェクトの位置を保存するにはどうすればよいですか?

分類Dev

AndroidのレイアウトXMLでオブジェクトにアニメーションを添付するにはどうすればよいですか?

分類Dev

RxJでアクションを実行した後、オブザーバブルを再試行するにはどうすればよいですか?

分類Dev

アニメーションでオブジェクトを水平方向に中央揃えするにはどうすればよいですか?

分類Dev

Unityでゲームオブジェクトが非アクティブ化された後にアニメーションをリセットするにはどうすればよいですか?

分類Dev

画面から出ないオブジェクトをアニメーション化するにはどうすればよいですか

分類Dev

Vue Konvaでスプライトオブジェクト/アニメーションを使用するにはどうすればよいですか?

分類Dev

SVGでオブジェクトのグループをアニメーション化するにはどうすればよいですか?

分類Dev

Androidアニメーションでオブジェクトの方向を移動/変更するにはどうすればよいですか?

分類Dev

svg on loopでアニメーションのオブジェクトを再描画するにはどうすればよいですか?

分類Dev

KineticJSでオブジェクトのアニメーションパスを描画するにはどうすればよいですか?

分類Dev

Androidのアニメーションの移動遷移でオブジェクトの方向を変更するにはどうすればよいですか?

分類Dev

NSArrayControllerがオブジェクトを自動的に再配置した後にメッセージを送信するにはどうすればよいですか?

分類Dev

アニメーションオブジェクトが特定の場所に来た場合、タイマーでアニメーションを停止するにはどうすればよいですか?

分類Dev

最初のアニメーションの後に2番目のアニメーションを実行するにはどうすればよいですか?

分類Dev

アニメーションを中断して再度実行するにはどうすればよいですか?

分類Dev

def __init __(self)関数を実行した後、クラスオブジェクトにデータを追加するにはどうすればよいですか?

分類Dev

close()メソッドを実行した後、Scannerオブジェクトを再度作成するにはどうすればよいですか?

分類Dev

カスタムアニメーションブートスクリーンを実行するにはどうすればよいですか?

分類Dev

Phaser 3でオブジェクトが別のオブジェクトと衝突している限り、アニメーションを再生するにはどうすればよいですか?

分類Dev

スムーズなオブジェクトまたはアニメーターアニメーションを作成するにはどうすればよいですか?

分類Dev

レスポンシブページの特定のポイントを通過した後、画像をアニメーション化してフェードインするにはどうすればよいですか?

分類Dev

チェーンを同時に使用して2つのJqueryアニメーションを実行するにはどうすればよいですか?

分類Dev

ナビゲーションバーからのテキストをクリックした後、それらにアニメーションを配置するにはどうすればよいですか?

分類Dev

サイトスケープアニメーションの終了後に関数を実行するにはどうすればよいですか?

分類Dev

既存のフォーメーションに新しいオブジェクトを追加/破棄するにはどうすればよいですか?

分類Dev

「ホバー解除」アニメーションを実行するにはどうすればよいですか?

分類Dev

アクティビティ遷移でフェードアニメーションを実行するにはどうすればよいですか?

分類Dev

述語を使用するUITableViewのセクション間でオブジェクトを移動することをアニメーション化するにはどうすればよいですか?

Related 関連記事

  1. 1

    JavaScriptでアニメーションの後にオブジェクトの位置を保存するにはどうすればよいですか?

  2. 2

    AndroidのレイアウトXMLでオブジェクトにアニメーションを添付するにはどうすればよいですか?

  3. 3

    RxJでアクションを実行した後、オブザーバブルを再試行するにはどうすればよいですか?

  4. 4

    アニメーションでオブジェクトを水平方向に中央揃えするにはどうすればよいですか?

  5. 5

    Unityでゲームオブジェクトが非アクティブ化された後にアニメーションをリセットするにはどうすればよいですか?

  6. 6

    画面から出ないオブジェクトをアニメーション化するにはどうすればよいですか

  7. 7

    Vue Konvaでスプライトオブジェクト/アニメーションを使用するにはどうすればよいですか?

  8. 8

    SVGでオブジェクトのグループをアニメーション化するにはどうすればよいですか?

  9. 9

    Androidアニメーションでオブジェクトの方向を移動/変更するにはどうすればよいですか?

  10. 10

    svg on loopでアニメーションのオブジェクトを再描画するにはどうすればよいですか?

  11. 11

    KineticJSでオブジェクトのアニメーションパスを描画するにはどうすればよいですか?

  12. 12

    Androidのアニメーションの移動遷移でオブジェクトの方向を変更するにはどうすればよいですか?

  13. 13

    NSArrayControllerがオブジェクトを自動的に再配置した後にメッセージを送信するにはどうすればよいですか?

  14. 14

    アニメーションオブジェクトが特定の場所に来た場合、タイマーでアニメーションを停止するにはどうすればよいですか?

  15. 15

    最初のアニメーションの後に2番目のアニメーションを実行するにはどうすればよいですか?

  16. 16

    アニメーションを中断して再度実行するにはどうすればよいですか?

  17. 17

    def __init __(self)関数を実行した後、クラスオブジェクトにデータを追加するにはどうすればよいですか?

  18. 18

    close()メソッドを実行した後、Scannerオブジェクトを再度作成するにはどうすればよいですか?

  19. 19

    カスタムアニメーションブートスクリーンを実行するにはどうすればよいですか?

  20. 20

    Phaser 3でオブジェクトが別のオブジェクトと衝突している限り、アニメーションを再生するにはどうすればよいですか?

  21. 21

    スムーズなオブジェクトまたはアニメーターアニメーションを作成するにはどうすればよいですか?

  22. 22

    レスポンシブページの特定のポイントを通過した後、画像をアニメーション化してフェードインするにはどうすればよいですか?

  23. 23

    チェーンを同時に使用して2つのJqueryアニメーションを実行するにはどうすればよいですか?

  24. 24

    ナビゲーションバーからのテキストをクリックした後、それらにアニメーションを配置するにはどうすればよいですか?

  25. 25

    サイトスケープアニメーションの終了後に関数を実行するにはどうすればよいですか?

  26. 26

    既存のフォーメーションに新しいオブジェクトを追加/破棄するにはどうすればよいですか?

  27. 27

    「ホバー解除」アニメーションを実行するにはどうすればよいですか?

  28. 28

    アクティビティ遷移でフェードアニメーションを実行するにはどうすればよいですか?

  29. 29

    述語を使用するUITableViewのセクション間でオブジェクトを移動することをアニメーション化するにはどうすればよいですか?

ホットタグ

アーカイブ