From: "Albert L. Wagner" Date: 2001-08-22T01:32:04+09:00 Subject: [ruby-talk:20063] Re: Ruby/Tk: procs and callbacks You're right that widget.bind('Key-Up') {|e| aCallback(e)} is the standard way of doing a callback in Ruby/Tk. However, how would you do it if you needed to reference the callback in some place other than the widget.bind? In the Perl/Tk book the DoWhenIdle is defined as: $widget->DoWhenIdle(callback); Queues callback in the low priority idle event queue. Then: $widget->idleTasks; Flushes the low priority idle event queue. This seemed worth a try as a means of discarding the flood of callbacks generated by a repeating key. However, it is probably moot in that Ruby/Tk apparently does not have a DoWhenIdle nor a idleTasks method. With such poor documentation, one is left with just poking at a black box to see what happens. Slow going. The main reason for all of this is that Tk is so slow. But, it is also so easy to use. Catch-22. Kero van Gelder wrote: > > > How might I name a block and then use it the widget.bind and > > widget.DoWhenIdle, i.e. > > > > aProc = proc{|e| aCallback(e)} > > > > widget.bind('Key-Up') &aProc > > > > widget.DoWhenIdle(&aProc) > > > > widget.idleTasks > > > > I have tried several variations, but can't get past the > > widget.bind. I must have a really wrong model of this in my > > head. > > widget.bind('Key-Up') { |e| > aCallback(e) > } > > doing it with aProc is a bit cumbersome: > > aProc = proc { > aCallback(e) > } > widget.bind('Key-Up') { |e| > aProc.call(e) > } > > PS: what's with idle? idle means doing nothing, yet you seem to let > the widget do something... > > +--- Kero ------------------------------ kero@chello.nl ---+ > | Don't split your mentality without thinking twice | > | Proud like a God -- Guano Apes | > +--- M38c ------- http://members.chello.nl/~k.vangelder ---+ -- "It requires wisdom to understand wisdom: the music is nothing if the audience is deaf." - Walter Lippman