From: rubist __ Date: 2006-07-29T04:07:46+09:00 Subject: Ruby/Tk code critique I have a bunch of Tk buttons tied to code. They're wrapped in an array to process later. What I'd like to do is set each one to have a visual indicator that it was used. So after it's clicked, it gets configured to have relief "flat" or background "yellow" etc. And then later, when a new row is being processed, I can iterate thru button_array and reset their color/relief etc. -- this is to aid the user in knowing which buttons they've already used. The simple/ugly way I suppose would be to make each button be like: TkButton.new(frame) { text "bleh" command proc { self.configure("relief","flat") run_code(:buttoncode) } } What I'm looking for is basically an elegant way to do this. Rather than modify each proc to add code to change the relief, I'd like an 'around' method to put around run_code. Or in run_code if I could identify the button that was clicked. #Random status label changes pru=proc{@status.configure('text'=>"Processing...")} prr=proc{@status.configure('text'=>"Ready...")} ## Proc for ETL tasks retl = proc{run_code(:etl)} etlre = proc{run_code(:etlreuse)} idsre = proc{run_code(:idsreuse)} edwre = proc{run_code(:edwreuse)} sorre = proc{run_code(:sorreuse)} #Buttons - ETL reuse lxxs_4 = TkButton.new(reusefr) { text "Reuse-ETL"; command etlre} lxxs_5 = TkButton.new(reusefr) { text "Reuse-IDS"; command idsre} lxxs_6 = TkButton.new(reusefr) { text "Reuse-EDW"; command edwre} lxxs_7 = TkButton.new(reusefr) { text "Reuse-SOR"; command sorre} button_array = [lxxs_4, lxxs_5 etc.] Incidentally, run_code looks like this: def run_code(par) @controller.dispatcher(par) end -- Posted via http://www.ruby-forum.com/.