Using [$img configure -data $newdata] to change an image already used in a ttk label doesn't change the displayed image.
The following code show the issue:
package require Tk
set icon1 {R0lGODlhEAAQAJEAANnZ2QAAAISEAP///yH5BAEAAAAALAAAAAAQABAAAAJ
WhI9pFB8RIIRC+BYQFqQQvkWEBSmEbyFhQQrhW0hYkEL4FhIWpBC+hYQFSYxvIgF
AoXy0AAiSGP8kAIIkxgcICSBEQvEBQgIIkVB8gJAAAhgfj+BjWgEAOw==}
set icon2 {R0lGODlhEAAQAKIAANnZ2QAAAP///4SEhP//AP///////////yH5BAEAAAA
ALAAAAAAQABAAAANZCLrcjqG7CLqBoquBoBuCoSqBoBsouhoIuiEYqrKBoIGiqwE
YEIChyxAIEYGgywEYgKHLDAgRCLozgwABARgIukSEABEBGLq8gAEQCLobgAEAgKH
LgaDLzZgAOw==}
set im [image create photo -data $icon1]
pack [label .l1 -image $im -text Tk -compound left] -padx 100 -pady 50
pack [ttk::label .l2 -image $im -text ttk -compound left] -padx 100 -pady 50
set current 1
proc swapimage {} {
global current im icon1 icon2
if {$current == 1} {
$im configure -data $icon2
set current 2
} else {
$im configure -data $icon1
set current 1
}
after 1000 swapimage
}
after 1000 swapimage