The following script will output a list of MainWindows and all (immediate) children for every instance that is running.
#!/usr/bin/env perl -T
use strict;
use warnings;
use Tk;
$ENV{HOME} =~ /^(.*)$/;
$ENV{HOME} = $1;
my $widget_list_joiner = '~';
my $mw = MainWindow->new(-title => 'Toplevel Lister');
$mw->geometry('400x300+50+50');
my $tl = $mw->Toplevel;
$tl->Button(-text => 'Close', -command => sub { $tl->withdraw })->pack
+;
$tl->raise;
my $action_F = $mw->Frame()->pack(-side => 'bottom');
my $exit_B = $action_F->Button(-text => 'Exit', -command => sub { exit
+ })->pack;
my $output_F = $mw->Frame()->pack;
my $info_T = $output_F->Scrolled('Text', -scrollbars => 'osoe')->pack;
$info_T->insert(end => '$mw->name : ' . $mw->name . "\n");
my @interps = $mw->interps;
$info_T->insert(end => '$mw->interps : ' . "\n");
for (sort @interps) {
$info_T->insert(end => "\t$_\n");
$info_T->insert(end => "\tToplevels:\n");
my $toplevel_list = $mw->send($_ => undef);
for (split $widget_list_joiner => $toplevel_list) {
$info_T->insert(end => "\t\t$_\n");
}
}
MainLoop;
sub Tk::Receive {
my $mw = shift;
return join $widget_list_joiner => $mw, $mw->children;
}
On the first run, the output looks like:
$mw->name : pm_tk_top_list
$mw->interps :
pm_tk_top_list
Toplevels:
MainWindow=HASH(0x7fecba93def0)
Tk::Toplevel=HASH(0x7fecba9493b0)
Tk::Frame=HASH(0x7fecba9a3900)
Tk::Frame=HASH(0x7fecba9a3180)
With 3 instances running:
$mw->name : pm_tk_top_list #3
$mw->interps :
pm_tk_top_list
Toplevels:
MainWindow=HASH(0x7fecba93def0)
Tk::Toplevel=HASH(0x7fecba9493b0)
Tk::Frame=HASH(0x7fecba9a3900)
Tk::Frame=HASH(0x7fecba9a3180)
pm_tk_top_list #2
Toplevels:
MainWindow=HASH(0x7f87a113df20)
Tk::Toplevel=HASH(0x7f87a11493b0)
Tk::Frame=HASH(0x7f87a11a3900)
Tk::Frame=HASH(0x7f87a11a3180)
pm_tk_top_list #3
Toplevels:
MainWindow=HASH(0x7fbb3093df50)
Tk::Toplevel=HASH(0x7fbb309493b0)
Tk::Frame=HASH(0x7fbb309a3900)
Tk::Frame=HASH(0x7fbb309a3180)
References:
|