tk subwidgets

tk subwidgets

am 29.05.2006 14:36:45 von doleman

Hallo, ich habe folgendes problem in Tk: Es geht um eine größere
Anwendung die verschiedene Widgets beinhaltet. Diese widgets (z.B.
tk::MYTree, tk::MYHlist...) sind von tk::tree bzw. tk::hlist mit
tk::dervied abgeleitet und in eigene Module hinterlegt. Sie erweitern
die standard widgets um ein Paar eigene Methoden.
Jetzt habe ich in der Hauptanwendung eine Statusbar die in einen Frame
einfach als label erstellt ist,und mit einer Variable $status_message
verbunden ist
Ich müsste jetzt aber den Status aus den Modulen (subwidgets) ändern.

Jetzt meine Frage wie kann man aus Modulen (subwidgets) auf die
variable $status_message des Hauptprogramms zugreifen?
Man kriegt doch aus einen subwidget mit $self-->toplevel() eine
Referenz auf die MainWindow
wie kann ich dann dann weiter auf meine Variable zugreifen?
Mit Tk::mega und dann Delegates könnte man glaub ich auch was machen
das habe ich aber nicht wirklich verstanden.....

Re: tk subwidgets

am 29.05.2006 22:12:44 von Ch Lamprecht

doleman schrieb:
> Hallo, ich habe folgendes problem in Tk: Es geht um eine größere
> Anwendung die verschiedene Widgets beinhaltet. Diese widgets (z.B.
> tk::MYTree, tk::MYHlist...) sind von tk::tree bzw. tk::hlist mit
> tk::dervied abgeleitet und in eigene Module hinterlegt. Sie erweitern
> die standard widgets um ein Paar eigene Methoden.
> Jetzt habe ich in der Hauptanwendung eine Statusbar die in einen Frame
> einfach als label erstellt ist,und mit einer Variable $status_message
> verbunden ist
> Ich müsste jetzt aber den Status aus den Modulen (subwidgets) ändern.
>
> Jetzt meine Frage wie kann man aus Modulen (subwidgets) auf die
> variable $status_message des Hauptprogramms zugreifen?
> Man kriegt doch aus einen subwidget mit $self-->toplevel() eine
> Referenz auf die MainWindow
> wie kann ich dann dann weiter auf meine Variable zugreifen?
> Mit Tk::mega und dann Delegates könnte man glaub ich auch was machen
> das habe ich aber nicht wirklich verstanden.....
>

Hallo,

der Weg über das MainWindow ist zu umständlich.
Ich würde den betreffenden Subwidgets einen Callback mitgeben, den sie benutzen
können, um den Statusbar zu beschreiben.
Das müsste nicht einmal ein Tk-Callback sein, ein 'PASSIVE' -Eintrag für die
betreffende Option im Aufruf von ConfigSpecs würde schon ausreichen.

in MyWidget.pm :

sub Populate{
my ($self,@args)=@_;
......
$self->SUPER::Populate(@args);
......
$self->ConfigSpecs(
...
-status_callback => 'PASSIVE'
...
);
....
}

sub work{
my $self = shift;
my $statuscb = $self->cget('-status_callback');
$statuscb->('Bin gerade sehr beschäftigt...');
....

$statuscb->('Arbeit ist getan');
}



Dann der Aufruf aus main:

my $status_text;
$mw -> Label( -textvariable => \$status_text,
)->pack;

$mw -> MyWidget( ....
-status_callback => sub { $status_text = shift },

)->pack;


Ungetestet ;)

Christoph

--

perl -e "print scalar reverse q/ed.enilno@ergn.l.hc/"

Re: tk subwidgets

am 29.05.2006 22:39:12 von Slaven Rezic

"doleman" writes:

> Hallo, ich habe folgendes problem in Tk: Es geht um eine größere
> Anwendung die verschiedene Widgets beinhaltet. Diese widgets (z.B.
> tk::MYTree, tk::MYHlist...) sind von tk::tree bzw. tk::hlist mit
> tk::dervied abgeleitet und in eigene Module hinterlegt. Sie erweitern
> die standard widgets um ein Paar eigene Methoden.
> Jetzt habe ich in der Hauptanwendung eine Statusbar die in einen Frame
> einfach als label erstellt ist,und mit einer Variable $status_message
> verbunden ist
> Ich müsste jetzt aber den Status aus den Modulen (subwidgets) ändern.
>
> Jetzt meine Frage wie kann man aus Modulen (subwidgets) auf die
> variable $status_message des Hauptprogramms zugreifen?
> Man kriegt doch aus einen subwidget mit $self-->toplevel() eine
> Referenz auf die MainWindow

Mit $w->MainWindow. Das macht einen Unterschied, wenn du
Toplevel-Widgets verwendest.

> wie kann ich dann dann weiter auf meine Variable zugreifen?
> Mit Tk::mega und dann Delegates könnte man glaub ich auch was machen
> das habe ich aber nicht wirklich verstanden.....

Versuch es lieber mit privateData.

Gruß,
Slaven

--
Slaven Rezic - slaven rezic de

tkruler - Perl/Tk program for measuring screen distances
http://ptktools.sourceforge.net/#tkruler

Re: tk subwidgets

am 07.06.2006 18:54:30 von doleman

Slaven Rezic schrieb:

> "doleman" writes:
>
> > Hallo, ich habe folgendes problem in Tk: Es geht um eine größere
> > Anwendung die verschiedene Widgets beinhaltet. Diese widgets (z.B.
> > tk::MYTree, tk::MYHlist...) sind von tk::tree bzw. tk::hlist mit
> > tk::dervied abgeleitet und in eigene Module hinterlegt. Sie erweitern
> > die standard widgets um ein Paar eigene Methoden.
> > Jetzt habe ich in der Hauptanwendung eine Statusbar die in einen Frame
> > einfach als label erstellt ist,und mit einer Variable $status_message
> > verbunden ist
> > Ich müsste jetzt aber den Status aus den Modulen (subwidgets) änder=
n
> >
> > Jetzt meine Frage wie kann man aus Modulen (subwidgets) auf die
> > variable $status_message des Hauptprogramms zugreifen?
> > Man kriegt doch aus einen subwidget mit $self-->toplevel() eine
> > Referenz auf die MainWindow
>
> Mit $w->MainWindow. Das macht einen Unterschied, wenn du
> Toplevel-Widgets verwendest.
>
> > wie kann ich dann dann weiter auf meine Variable zugreifen?
> > Mit Tk::mega und dann Delegates könnte man glaub ich auch was machen
> > das habe ich aber nicht wirklich verstanden.....
>
> Versuch es lieber mit privateData.
>
> Gruß,
> Slaven
>
> --
> Slaven Rezic - slaven rezic de
>
> tkruler - Perl/Tk program for measuring screen distances
> http://ptktools.sourceforge.net/#tkruler

ich hab das mal über configSpecs gemacht scheint mir ganz
vernünftig....übrigens
'PASSIVE' hat nicht funktioniert man muss ['PASSIVE'] angeben obwohl es
eigentlich keine liste ist, egal...
jetzt aber noch ne frage wenn ich auf methoden von verschiedenen
Widgets zugreifen will komm ich nicht drum rum das über
MainWindow->Advertise("bla") und dann aus ein anderen Widget,
Mainwindow->Subwidget.("bla")->Methode oder? Das gefällt mir
eigentlich nicht so..
danke

gruß
doleman

Re: tk subwidgets

am 07.06.2006 21:08:13 von Slaven Rezic

"doleman" writes:

> Slaven Rezic schrieb:
>
> > "doleman" writes:
> >
> > > Hallo, ich habe folgendes problem in Tk: Es geht um eine größere
> > > Anwendung die verschiedene Widgets beinhaltet. Diese widgets (z.B.
> > > tk::MYTree, tk::MYHlist...) sind von tk::tree bzw. tk::hlist mit
> > > tk::dervied abgeleitet und in eigene Module hinterlegt. Sie erweitern
> > > die standard widgets um ein Paar eigene Methoden.
> > > Jetzt habe ich in der Hauptanwendung eine Statusbar die in einen Frame
> > > einfach als label erstellt ist,und mit einer Variable $status_message
> > > verbunden ist
> > > Ich müsste jetzt aber den Status aus den Modulen (subwidgets) ändern.
> > >
> > > Jetzt meine Frage wie kann man aus Modulen (subwidgets) auf die
> > > variable $status_message des Hauptprogramms zugreifen?
> > > Man kriegt doch aus einen subwidget mit $self-->toplevel() eine
> > > Referenz auf die MainWindow
> >
> > Mit $w->MainWindow. Das macht einen Unterschied, wenn du
> > Toplevel-Widgets verwendest.
> >
> > > wie kann ich dann dann weiter auf meine Variable zugreifen?
> > > Mit Tk::mega und dann Delegates könnte man glaub ich auch was machen
> > > das habe ich aber nicht wirklich verstanden.....
> >
> > Versuch es lieber mit privateData.
> >
> > Gruß,
> > Slaven
> >
> > --
> > Slaven Rezic - slaven rezic de
> >
> > tkruler - Perl/Tk program for measuring screen distances
> > http://ptktools.sourceforge.net/#tkruler
>
> ich hab das mal über configSpecs gemacht scheint mir ganz
> vernünftig....übrigens
> 'PASSIVE' hat nicht funktioniert man muss ['PASSIVE'] angeben obwohl es
> eigentlich keine liste ist, egal...
> jetzt aber noch ne frage wenn ich auf methoden von verschiedenen
> Widgets zugreifen will komm ich nicht drum rum das über
> MainWindow->Advertise("bla") und dann aus ein anderen Widget,
> Mainwindow->Subwidget.("bla")->Methode oder?

Ja.

> Das gefällt mir
> eigentlich nicht so..

Wegen des festen Namens für "bla"?

--
Slaven Rezic - slaven rezic de

Visualize XML files in a Tk text widget:
http://search.cpan.org/search?mode=module&query=Tk::XMLViewe r