#!/usr/bin/env ruby # This script is a sample of MultiTkIp class require "multi-tk" # create slave interpreters trusted_slave = MultiTkIp.new_slave safe_slave1 = MultiTkIp.new_safeTk safe_slave2 = MultiTkIp.new_safeTk('fill'=>:none, 'expand'=>false) #safe_slave2 = MultiTkIp.new_safeTk('fill'=>:none) #safe_slave2 = MultiTkIp.new_safeTk('expand'=>false) cmd = Proc.new{|txt| ##################### ## from TkTimer2.rb begin root = TkRoot.new(:title=>'timer sample') rescue # safeTk doesn't have permission to call 'wm' command end label = TkLabel.new(:parent=>root, :relief=>:raised, :width=>10) \ .pack(:side=>:bottom, :fill=>:both) tick = proc{|aobj| cnt = aobj.return_value + 5 label.text format("%d.%02d", *(cnt.divmod(100))) cnt } timer = TkTimer.new(50, -1, tick).start(0, proc{ label.text('0.00'); 0 }) TkButton.new(:text=>'Start') { command proc{ timer.continue unless timer.running? } pack(:side=>:left, :fill=>:both, :expand=>true) } TkButton.new(:text=>'Stop') { command proc{ timer.stop if timer.running? } pack('side'=>'right','fill'=>'both','expand'=>'yes') } ev_quit = TkVirtualEvent.new('Control-c', 'Control-q') Tk.root.bind(ev_quit, proc{Tk.exit}).focus } # call on the default master interpreter trusted_slave.eval_proc(cmd, 'trusted') # label -> .w00012 safe_slave1.eval_proc(cmd, 'safe1') # label -> .w00015 safe_slave2.eval_proc(cmd, 'safe2') # label -> .w00018 cmd.call('master') # label -> .w00021 TkTimer.new(2000, -1, proc{p ['safe1', safe_slave1.deleted?]}).start TkTimer.new(2000, -1, proc{p ['safe2', safe_slave2.deleted?]}).start TkTimer.new(2000, -1, proc{p ['trusted', trusted_slave.deleted?]}).start TkTimer.new(10000, 1, proc{ trusted_slave.eval_proc{Tk.root.destroy} trusted_slave.delete print "*** The trusted_slave is deleted by the timer.\n" }).start Tk.mainloop