proc make_grayscale {} { display update off set coloridcount [colorinfo num] set colordiv [expr $coloridcount - 1.0] for {set i 0} {$i < $coloridcount} {incr i} { set val [expr $i / $colordiv] color change rgb $i $val $val $val } display update on }Note that the display updates are switched off for the time of redefinition, so that the screen would not be redrawn every time one color is changed. This way the procedure works faster. The only bad thing about this idea is that black becomes white, and white changes too, so the names of the colors (yellow, orange, etc.) become useless.