$widget -> geometry("wxh+x+y") width (w), height (h), yposition (x), and yposition (y) can be set as string using above syntax. Position and size can be set independently, e.g. "+x+y" or "100x200". Without a parameter the actual size and position is returned in the above syntax. Attention: Values are "0" before the widget has manifested itself on the screen; use update() or waitVisibility() if unsure. Note: All values are in pixels. The screensize can be requested using $top -> screenwidth() and $top -> screenheight() Thus (e.g.): $h = $top->screenheight() - 40; $w = $top->screenwidth() - 40; $top -> geometry("${w}x$h+20+20") # if you specify -0-0 for position, you anchor in the lower right corner #### #!/usr/bin/perl use warnings; use strict; use Tk; my ($x,$y,$count) = (0,0,0); for(1..15) { $count++; if (fork == 0) { #$widget->geometry("wxh+x+y") my $top = new MainWindow; $top->geometry('100x100'.'+'.$x.'+'.$y); $top->Button(-command => sub { warn "top$_" })->pack; MainLoop; CORE::exit(); } if( $count % 3 == 0) {$y += 150; $x = 0 } $x += 150; } MainLoop; #If you need start a new process from one of the child processes, then #you have to establish some kind of IPC (e.g. pipes) between the child #and parent. #I the launched task running another Perl/Tk module or function or a #complete new program? In the latter case, you should just use fork and #exit/system and do not forget to use CORE::exit instead of exit in the #child process (according to the FAQ). Perl/Tk forks are somewhat more #difficult. You have to make sure that you fork off the process which #does not have a created a MainWindow itself. This will work fine: