Da erzeugst du ein Mainwindow. Ist das dein Hauptprogramm oder das, was nach dem Klick auf den Button aufgerufen wird?
Hier mal ein schrecklich umkommentiertes Beispiel:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!perl
package Editform;
use strict;
use warnings;
use Tk;
sub new {
my $class = shift;
my $parent = shift;
my $self = bless({}, $class);
$self->{'__PARENT'} = $parent;
return $self;
} # /new
sub display {
my $self = shift;
my $parent = $self->{'__PARENT'};
my $tl = $parent->Toplevel(-width => 200, -height => 200, -bg => 'blue',);
return;
} # /display
1;
package Userimages;
use strict;
use warnings;
use Tk;
sub new {
my $class = shift;
my $parent = shift;
my $self = bless({}, $class);
$self->{'__PARENT'} = $parent;
return $self;
} # /new
sub display {
my $self = shift;
my $parent = $self->{'__PARENT'};
my $tl = $parent->Toplevel(-width => 200, -height => 200, -bg => 'yellow',);
return;
} # /display
1;
package main;
use strict;
use warnings;
use Tk;
my $mw = tkinit();
$mw->Button(
-text => 'dialog1',
-command => sub{
my $form = Editform->new($mw);
$form->display();
},
)->pack();
$mw->Button(
-text => 'Userimages',
-command => sub{
my $form = Userimages->new($mw);
$form->display();
},
)->pack();
$mw->MainLoop();
Die Klassen Editform und Userimages sollen die Dialoge sein, die du aufrufen kannst. Deren Konstruktor erhält jeweils das MainWIndow und das wird dann in der Methode display() verwendet (als Parent für das TopLevel).
Was der Code noch nicht hat: er sperrt das MainWindow nicht, so lange der Dialog offen ist (würde ich auch nur machen, wenn es wirklich Sinn macht) und man kann die Fenster mehrfach öffnen.
Hift das schon weiter?