You could mildly simplify your "on change" logic by using widget.toggle:
on change label active do if label = "Words" field1.toggle["solid" active] elseif label = "Picture" canvas1.toggle["solid" active] end end
If you're frequently changing the set of widgets affected, it might also be worth considering a data-driven approach: form a dictionary mapping labels to lists of widgets, and then toggle entire lists:
on change label active do wids.Words: field1,field2 wids.Picture: canvas1,canvas2 wids[label]..toggle["solid" active] end
And in principle, with a somewhat different contract, you could even lift the toggling up to the tabstrip itself, just leaving the user code to construct such a dictionary. This would, of course, be somewhat less flexible.