14

私はアメリカの信号機をシミュレートしようとしています.長方形の上に3つの円があり、すべてセットキャンバスに描かれています. シミュレーションは、次の順序で 2 秒ごとに表示されるライトを変更することによって「アニメーション」を反映することになっています: 緑 > 黄 > 赤 > 緑、など永久に。

これを行う唯一の方法は、canvas.move()、canvas.after()、canvas.update() パターンを使用して、塗りつぶされた楕円形のオブジェクトを移動し、塗りつぶされていない円を一度に 1 つずつ重ねることです。適切な速度で正しい順序で円を移動するためのロジックを取得しました。問題は、「緑」で塗りつぶされた円をインスタンス化するだけですが、この方法を使用して「黄色」または「赤」に変更することはできません。canvas.delete("filled") を実行し、2 秒ごとに異なる塗りつぶしで新しい場所に再描画するのはばかげているように思えます。

質問 1:fill何らかの方法またはその他の手段を使用して、塗りつぶされた Canvas オブジェクトのオプションを自由に変更できる方法はありますか?

質問 2: このシナリオへのアプローチは間違っていますか? これをシミュレートするより良い方法はありますか?

4

1 に答える 1

31

はい、キャンバスの設定を で変更できるはずですconfig()

同様にitemconfig()、キャンバス上のアイテムを変更するために使用します。これには、アイテムのハンドルを保存するか、タグを付ける必要があります。

tkinterbook に基づく例:

item = canvas.create_line(xy, fill="red")

canvas.coords(item, new_xy) # change coordinates
canvas.itemconfig(item, fill="blue") # change color
于 2012-10-20T19:10:22.420 に答える