Although standard [Tk] doesn't supply a toggle button, and most developers seem content to use a [checkbox] in its place, [Uwe Klein] illustrates how easy it is to customize a [button] by refinement of a [label]: set ::state OFF label .lb -textvariable ::state -relief raised -bd 4 bind .lb { if {"$::state" == "OFF"} { set ::state ON %W configure -relief sunken } else { set ::state OFF %W configure -relief raised } } label .l -textvariable ::state pack .lb .l -side left [[Comments: all buttons thus; deserves abstraction; backward-compatible only to 8.?]]