Yes to all those questions. :-)
Considering you are using Proc::Background to run your c based ssh connections, your best bet for this style of code may be to make individual mainwindows for each connection, otherwise you would make one mainwindow, and the rest would be dependent toplevels. If you go the toplevel route, you may still run into the blocking of the eventloop. The best solution would be to run each ssh instance in it's own thread, and display all the input/output in a set of Text widgets.
But lets just get back to just opening multiple mainwidows( independent eventloops) and controlling their placements. It's quite simple. The general way to do it is:
Here is a rudimentary example, almost a Window Bomb. :-)$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 ab +ove syntax. Attention: Values are "0" before the widget has manifested itself on t +he 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 corn +er
#!/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 an +d #exit/system and do not forget to use CORE::exit instead of exit in th +e #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:
In reply to Re: Perl/Tk + CSSH
by zentara
in thread Perl/Tk + CSSH
by Monkless
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |