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

BrowseEntry (dropdown) Indexes heraus bekommen

Leser: 2


<< >> 8 Einträge, 1 Seite
Krikus
 2007-12-03 20:25
#103406 #103406
User since
2007-11-10
13 Artikel
BenutzerIn
[default_avatar]
Hi,

ich habe folgendes Problem.
Ich habe eine Array welches ich in ein dropdown schreibe.
Leider kann ich daraus nicht die Indexes der Einträge bestimmen, bzw weiß nicht wie dies geht.

Mit Listboxen habe ich es geschafft. Sieht allerdings nicht sehr schön aus.

Vielleicht hat einer von Euch schon so ein ähnliches Problem gehabt, und kann Tips geben.

MFG

Krikus
styx-cc
 2007-12-03 20:59
#103408 #103408
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl -w 
use strict;
use Tk;
use Tk::BrowseEntry;

my $mw = tkinit();
my $frame = $mw->Frame->pack;

$b = $frame->BrowseEntry(-label => "Label", -browse2cmd => \&show_index);
$b->insert("end", "opt1");
$b->insert("end", "opt2");
$b->insert("end", "opt3");
$b->pack;
MainLoop;

sub show_index {
  my $self = shift;
  print shift;
}


Steht aber auch in der Dokumentation.

Edit:
$b aber sonst bitte nicht so verwenden
Pörl.
Krikus
 2007-12-03 22:53
#103410 #103410
User since
2007-11-10
13 Artikel
BenutzerIn
[default_avatar]
Besten Dank.
Gibt jetzt allerdings noch ein Problem.
Hier mal ein Auszug aus dem Problem Code:

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
my ($gr_frame34,$dropdown34,$button34,$label34,$var,$line,$cn,$cn_full,$tmp);
sub gruppe_loeschen 
{
  
  $framelist->packForget;
  unless ($gr_frame34){ # init
  $gr_frame34 = $main->Frame;
  $label34 = $gr_frame34->Label(-text => 'Gruppe löschen') ->pack(-side => 'top');
 $dropdown34 = $gr_frame34->BrowseEntry(-browse2cmd => \&show_index, -variable => \$var))->pack(-side => 'top'); 
  #$dropdown34=$gr_frame34->Listbox(-height=>40)->pack(-side => 'top');
 show_group();
 my @group_cn;
  my @group_all;
  foreach $line (@main::group) 
  {
    ($cn_full) = split(",", $line);
    ($tmp, $cn) =split ("=",$cn_full);
    push(@group_cn,$cn);
        push(@group_all,$line);

  }
        $dropdown34->insert(0,@group_cn);
        
        
 
  $button34 = $gr_frame34->Button(-text => 'Gruppe löschen', -command => 
        sub{
                        print $var;
                        print $main::self;##POBLEME STELLE
                        print $group_all[$main::self]; ##POBLEME STELLE
                
                        
            $gr_frame34->packForget;
           }
         )->pack(-side => 'bottom');
     }
         $active_frame->packForget if ($active_frame);
     $gr_frame34 -> pack;
     $active_frame = $gr_frame34;


sub show_index 
{
 our $self = shift;
   print shift;
 }




Das Problem ist nun, das in $main::self; ein Hash Wert steht, und ich somit nicht das richtige Element aus dem Array ansprechen kann.
pktm
 2007-12-04 02:55
#103414 #103414
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Mach mal:
Code: (dl )
1
2
3
4
use Data::Dumper qw/Dumper/;
sub show_index {
print Dumper \@_;
}


und zeigt mir, was genau er da ausgibt.

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
Krikus
 2007-12-04 07:42
#103416 #103416
User since
2007-11-10
13 Artikel
BenutzerIn
[default_avatar]
Das ist verdammt viel.

Ich habe es einmal in eine TXT Datei schreiben lassen.

Den richtigen Index Bekomme ich schon, nur wenn ich diesen Indes in der Sub button34 Aufrufe bekomme ich den Hash WERt.

Link zum Dump
styx-cc
 2007-12-04 08:49
#103418 #103418
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Hi!

Du gibst in deinem Code auch dir Referenz zu deiner Browse-Entry-Instanz aus und nicht den Index.

Wenn du den Index im Command fuer den Button34 aufrufen moechtest:
Code (perl): (dl )
1
2
3
4
5
6
sub show_index {
  my $self = shift;
  our $index = shift;
  print $index;
}
print $main::index;


MfG

Edit:
Vielleicht solltest du versuchen $index als Referenz an show_index() zu uebergeben, anstatt es global zu machen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
my $last_index;
$dropdown34 = $gr_frame34->BrowseEntry(-browse2cmd => show_index(\$last_index),
-variable => \$var))->pack;

sub show_index {
  my $self = shift;
  my $index = shift;
  $index_ref = shift;
  $$index_ref = $index;
}

danach hast du den wert in $last_index

MfG

ungetestet
Pörl.
Krikus
 2007-12-04 12:40
#103430 #103430
User since
2007-11-10
13 Artikel
BenutzerIn
[default_avatar]
Weiß garnicht wie ich mich bedanken kann.

Der Service und die Hilfsbereitschaft hier ist einfach Klasse.

Habe mich für doe Variante mit der globalen Variablen entschieden.


Kann ich diese Variante auch bei 2 aktiven Dropdowns verwenden, ohne das dieser mit den indexes quer kommt?
styx-cc
 2007-12-04 18:07
#103446 #103446
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Ja, dann hat die Variable immer den Wert des BrowseEntry, das zuletzt benutzt wurde.
Pörl.
<< >> 8 Einträge, 1 Seite



View all threads created 2007-12-03 20:25.