Schrift
[thread]5080[/thread]

Bei Tk in den Mainloop eingreifen??

Leser: 1


<< >> 9 Einträge, 1 Seite
DocJunioR
 2005-09-16 10:42
#44563 #44563
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
Also ich bin der Meinung, dass man Oberfläche und Funktionalität strikt trennen sollte. Dies scheint jedoch in Perl ein wenig schwierig zu werden.
Hab mir jetzt folgendes überlegt:

Ich hab ein Frame als Klasse in dem meine Oberfläche agiert.
Dieses wird per new() auf mein Fenster gepappt.
So weit so gut. Nun möchte ich sämtliche Aktionen umleiten in Variablen ($self->{porder}, $self->{pdata}). Diese wurden von außen per new als Referenz belegt. Somit hab ich eine Schnittstelle nach draußen. Jetzt muss ich im Pollingverfahren herausfinden ob eine Aktion auf das Frame stattfand.
Wie kann ich also den Mainloop so schreiben, daß mir dieses vergönnt ist?
Im Endeffekt müsste ich eine Funktion regelmäßig aufrufen, die dieses durchführt.

Edit: Es müsste eigentlich auch genügen, wenn ich auf dem übergeordneten Fenster einen Event auslösen kann..\n\n

<!--EDIT|DocJunioR|1126853203-->
renee
 2005-09-16 10:46
#44564 #44564
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Welche Aktionen denn??

Du kannst verschiedene Events per bind an das Frame binden...

Edit: Hier das entsprechende Kapitel im Tutorial...\n\n

<!--EDIT|renee|1126853298-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
DocJunioR
 2005-09-16 10:50
#44565 #44565
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
Ja, aber diese müsste ich doch dann innerhalb der Klasse abhandeln und das will ich nicht.

Oder kann ich Funktionen aufrufen, die innerhalb der Parentklasse existieren?
renee
 2005-09-16 10:57
#44566 #44566
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du kannst auch Funktionen der Parentklasse aufrufen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
DocJunioR
 2005-09-16 11:01
#44567 #44567
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
ist imho auch keine saubere Lösung, aber immernoch besser als diese Wurschtelei
renee
 2005-09-16 11:07
#44568 #44568
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was würdest Du denn für eine saubere Lösung halten?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
DocJunioR
 2005-09-16 11:33
#44569 #44569
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
wie oben schon gesagt.
Funktion und Oberfläche müssten strikt getrennt werden.
Die Oberfläche selbst darf nur melden, was geschehen ist und die Logik im Hintergrund holt sich diesse Daten bearbeitet sie. Anschließend wird die Oberfläche aktualisiert.
renee
 2005-09-16 11:36
#44570 #44570
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das kannst Du ja strikt trennen. Die Bindings machst Du bei der Oberfläche und die Funktionen, die ausgeführt werden, kannst Du in ein extra Modul packen... Viel strikter kann man es nicht machen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2005-09-16 12:05
#44571 #44571
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
So ähnlich könnte man es machen:
Skript:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl

use strict;
use warnings;
use Tk;
use lib qw(.);
use ActionListener;

my $mw = MainWindow->new();
my $label = $mw->Label(-text => 'test')->pack();
my $actionlistener = ActionListener->new();

$actionlistener->add($label);

MainLoop;


ActionListener.pm:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package ActionListener;

use Tk;

sub new{
my $self = {};
bless $self,shift;
return $self;
}

sub add{
my ($self,$widget) = @_;
$widget->Tk::bind($widget,'<Button-1>',[\&left]);
}

sub left{
print "linke Maustaste gedrückt...\n";
}

1;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 9 Einträge, 1 Seite



View all threads created 2005-09-16 10:42.