TkAfterクラス

TkAfterクラスは,一定時間毎にウィジェットに対して何らかの動作をさせる時に使用するクラスです.点滅をさせたい時,時計のように毎秒変化させたい時などに重宝します.

使用例を示します.

#!/usr/local/bin/ruby

require 'tk'
require 'tkafter'

var = TkVariable.new('0')
num = 0
TkLabel.new(nil,
	    'width' => 20,
	    'textvariable' => var).pack

TkAfter.new(500, -1, proc{num += 1; var.value = String(num)}).start
Tk.mainloop
上記のプログラムを走らせると,下のようになります.500ミリ秒毎に,数字が1ずつ増えていきます.

TkAfterクラスの主なメソッドを以下に示します.
主なメソッド
メソッド名 機能
new(time, loop, procedure) 一定時間ごとに与える動作を定義します.
  • time:動作をさせる間隔(msec).
  • loop:繰り返し回数.負の値の場合は無限に繰り返します.
  • procedure:実行内容.proc{x}でRubyスクリプトxが記述できます.
start 定義した定時動作を起動させます.
stop 定義した定時動作を停止させます.
restart 停止状態になっている定時動作を再起動させます

一定時間毎ではなく,間隔を変化させることも出来ます.以下のプログラムではレイアウトは上の画像と同じですが,数字の変化の様子がかわります.

#!/usr/local/bin/ruby

require 'tk'
require 'tkafter'

var = TkVariable.new('0')
time_array = [1024,512,256,128,64,32,16,8,4,2]
num = 0
TkLabel.new(nil,
	    'width' => 20,
	    'textvariable' => var).pack

TkAfter.new(proc{val = time_array.shift; time_array.push(val); val}, -1, proc{num += 1; var.value = String(num)}).start
Tk.mainloop

戻る