Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]4676[/thread]

dynamische oberfläche



<< >> 6 Einträge, 1 Seite
Gast Gast
 2003-11-20 14:50
#45491 #45491
.... die buttons mit buttenpress und buttenrelease  funktioniernen (siehe BUTTON)
ich möchte über eine schleife Buttons/label/entry generieren, die je nach anforderung und einstellung sich ändern können.
alles kein problem, nur will ich dann noch irgendwelche spezifischen variablen mitgeben ......
Mein problem ist, wie kann ich auslesen, welcher button gedrückt wurde .... oder wie kann ich buttonspezifisch eine variable abfragen, um zu erkennen, welcher button gedückt wurde ....??
hoffe ich habe mein problem verständlich erklärt
Vielen Dank im voraus für eure hilfe
-helmut-
Crian
 2003-11-20 15:38
#45492 #45492
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Nicht ganz ...

Du kannst ja an Button-Drücken-Events Funktionen binden, etwa eine eigene Funktion, der Du bei jedem Button, zu der Du sie bindest, eine andere Bezeichnung als ersten Parameter mitgibst.

Oder Du bindest unterschiedliche Funktionen an die Buttons.

Beschreibe bitte genauer, was Du erreichen möchtest.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
coax
 2003-11-20 15:45
#45493 #45493
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Das erste Argument das an die Callback-Routine uebergeben wird, ist das mit bind gebundene Widget.

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

my $mw = new MainWindow;

foreach my $text (qw/eins zwei drei/) {
   my $b = $mw->Button(-text => $text)->pack();
   $b->bind('<ButtonPress>' => \&printButtonLabel);

}

MainLoop();

sub printButtonLabel {
   # $w enthaelt das aufrufende Widget
   my($w) = @_;

   my $t = $w->cget('-text');
   
   print "Button: $t gedrueckt\n";
}
,,Das perlt aber heute wieder...'' -- Dittsche
Crian
 2003-11-20 17:04
#45494 #45494
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Ja... ich meinte so etwas ähnliches, etwa:

Code: (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
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

use Tk;

my $mw = new MainWindow;

foreach my $text (qw/eins zwei drei/) {
my $b = $mw->Button(-text => "Button Nr. $text")
->pack(-fill => 'x');
$b->bind('<ButtonPress>' => [ \&printButtonLabel, $text ] );
}

MainLoop();

sub printButtonLabel {
my $widget = shift;
my $text = shift;
my $aufschrift = $widget->cget('-text');


print "Button: $text (Aufschrift '$aufschrift') gedrueckt\n";
}


Beispielausgabe:

Code: (dl )
1
2
3
Button: eins (Aufschrift 'Button Nr. eins') gedrueckt
Button: zwei (Aufschrift 'Button Nr. zwei') gedrueckt
Button: drei (Aufschrift 'Button Nr. drei') gedrueckt
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Ishka
 2003-11-20 20:09
#45495 #45495
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Anstatt nachträglich mit bind eine subroutine zu übergeben, kannst du auch gleich beim definieren eine sub mitangeben:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use strict;
use warnings;
use Tk;

my $main=new MainWindow;
for(qw(eins zwei drei)){
$main->Button(-text=>$_,-command=>[\&p,$_])->pack;
}

MainLoop();

sub p
{
print $_[0];
}
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
proass
 2003-11-21 15:02
#45496 #45496
User since
2003-11-20
3 Artikel
BenutzerIn
[default_avatar]
:) Danke :) für die tolle hilfe :)
<< >> 6 Einträge, 1 Seite



View all threads created 2003-11-20 14:50.