So, you have coded up a beautiful GUI, in which you have programmatically created a lot of widgets. While debugging your script, you find out that you need to know which widget is which? ---- ====== proc which_widget {widgetname} { set res {} catch { set res [winfo class $widgetname ]} puts "$widgetname is a $res widget." } bind all {which_widget %W} ====== ---- Now all you have to do is place the mouse pointer in the widget in question. Hope this helps someone save a little time and effort. ''so September 8, 2001 '' ---- The problem with this, of course, is that I don't want debug code splattering huge amounts of text all over my control window while I'm debugging... so I do it slightly differently. ====== proc which_widget {widgetname} { set str "{[winfo class $widgetname]} $widgetname" wm title [winfo toplevel $widgetname] $str } bind all {which_widget %W} ====== A Question for you, ''so''. Why do you do this: ====== catch { set res [winfo class $widgetname ]} ====== when this would make so much more sense? ====== catch {winfo class $widgetname} res ====== '''-EE''' [RS]: The second way would put either the [winfo class] result, or the error message into ''res'', which maybe he didn't want to display in the window title - the first way is a "silent catch" (if you initialize ''res'' to an empty string before). An alternative would be ======= if ![catch {winfo class $widgetname} res] { wm title ...$res ;# or puts ...$res } ====== [SO]: EE, nice touch putting the info in the title. Richard addresses the "silent catch" issue, and (as usual) demonstrates more elegant scripting style. In practice, I personally dont bind this to the enter event either, for the reason you stated. I figured people would modify things to suit their own tastes and purposes. It just seems to make a better ''demo'' when bound to enter. <> GUI