4

tkinter を使用していくつかのデータを視覚化する簡単なコードがあります。ボタンのクリックは、データの次の「フレーム」を再描画する関数にバインドされています。ただし、特定の頻度で自動的に再描画するオプションが必要です。GUI プログラミングに関しては、私は非常に環境に優しいので (このコードについて多くのことを行う必要はありません)、ほとんどの tkinter の知識は、例をたどって変更することから得られます。これを達成するために root.after を使用できると思いますが、他のコードからどのように理解できるかはよくわかりません。私のプログラムの基本的な構造は次のとおりです。

# class for simulation data
# --------------------------------

def Visualisation:

   def __init__(self, args):
       # sets up the object


   def update_canvas(self, Event):
       # draws the next frame

       canvas.delete(ALL)

       # draw some stuff
       canvas.create_........


# gui section
# ---------------------------------------

# initialise the visualisation object
vis = Visualisation(s, canvasWidth, canvasHeight)

# Tkinter initialisation
root = Tk()
canvas = Canvas(root, width = canvasWidth, height = canvasHeight)

# set mouse click to advance the simulation
canvas.grid(column=0, row=0, sticky=(N, W, E, S))
canvas.bind('<Button-1>', vis.update_canvas)

# run the main loop
root.mainloop()

明白で単純な答えがあると確信している質問をして申し訳ありません。どうもありがとう。

4

2 に答える 2

12

Tkinter でアニメーションまたは定期的なタスクを実行するための基本的なパターンは、単一のフレームを描画するか、単一のタスクを実行する関数を作成することです。次に、次のようなものを使用して定期的に呼び出します。

def animate(self):
    self.draw_one_frame()
    self.after(100, self.animate)

この関数を 1 回呼び出すと、毎秒 10 の速度でフレームを描画し続けます (100 ミリ秒ごとに 1 回)。アニメーションの開始後に停止できるようにする場合は、フラグをチェックするようにコードを変更できます。例えば:

def animate(self):
    if not self.should_stop:
        self.draw_one_frame()
        self.after(100, self.animate)

次に、クリックすると次のように設定self.should_stopされるボタンがあります。False

于 2012-07-16T13:09:28.000 に答える