Das liegt daran, daß in Tk die Sachen nicht parallel, sondern sequentiell abgearbeitet werden, dh. wenn deine Routine das alles ändert, passiert an Tk nichts gleichzeitig nebenher.
Aber du kannst jederzeit deine Fenster aktualisieren mit $fenster->update; (für jedes MainWindow getrennt)
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}