Thread variable sub auf Tk button (4 answers)
Opened by Kalle at 2009-08-28 00:47

Kalle
 2009-08-28 00:47
#125038 #125038
User since
2007-03-18
48 Artikel
BenutzerIn
[default_avatar]
Hallo,

Im folgenden Beispielscript soll ein Button mit einer variablen sub belegt werden.
LanX' coderefs Beispiel aus dem Thread Symbolische Referenz trotz strict funktioniert, wenn ich die subref so definiere wie im Script zu sehen ist. Ich möchte testsub1 aber durch die Variable $thissub ersetzen. Es sieht irgendwie nicht schwer aus, aber ich komm nicht drauf.
Wie mach ich das ?
(Gerne auch andere Möglichkeiten den Button mit diesem zusammengesetzten Prozeduraufruf zu belegen, nur keine Dispatch Table).

Code (perl): (dl )
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
#!/usr/local/bin/perl

use strict;
use warnings;

use Tk;

create_input_window('Test1','testsub1');
create_input_window('Test2','testsub2');

MainLoop;


sub create_input_window {
  my $title = shift;    # first line is the window title
  my $thissub = shift;  # second line is the sub that is executed when the submit button is pressed

  my $mw = MainWindow->new(-title=>"$title");
  my $mw_edit = $mw->Scrolled('Text',-relief => 'sunken', -borderwidth => 2, -scrollbars=>'osoe')->pack(-expand => '1', -fill => 'both');

  my $subtoexecute = sub{testsub1($mw_edit->get('1.0', 'end'))}; # <-- wie kann man hier testsub1 durch die Variable $thissub ersetzen ?

  my $mw_submit_button = $mw->Button(-text => 'Submit',-background=>'gray',-command=> $subtoexecute )->pack(-side=>'left');

  my $mw_close_button = $mw->Button(-text => 'Close',-background=>'gray',-command => sub{$mw->destroy})->pack(-side => 'top',-expand => '0',-fill => 'x');

  $mw_edit->insert('end',"aA\nbB\ncC");

}

sub testsub1 {
  my $contents=shift;
  my $linecount=0;
  foreach my $line (split(/\n/,$contents)) {
   $linecount++;
   print "$linecount: ".uc($line)."\n";
  }
}

sub testsub2 {
  my $contents=shift;
  my $linecount=0;
  foreach my $line (split(/\n/,$contents)) {
   $linecount++;
   print "$linecount: ".lc($line)."\n";
  }
}


Gruß

Kalle

----
Modedit GwenDragon: Code-Tags auf Perl-Syntaxcoloring umgestellt
----
Last edited: 2009-08-28 08:31:19 +0200 (CEST)

View full thread variable sub auf Tk button