Schrift
[thread]4882[/thread]

Rechtsklick-menü erzeugen



<< >> 9 Einträge, 1 Seite
Froschpopo
 2005-04-01 18:27
#43008 #43008
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich hab nen Text:
Code: (dl )
$em->Label(-text => "mit rechte maustaste auf diesen text klicken");

jetzt will ich, dass wenn man mit der rechten maustaste auf den text klickt, sich nen untermenü öffnet.
coax
 2005-04-01 18:48
#43009 #43009
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl

 use strict;
 use warnings;

 use Tk;

 my $mw = tkinit;

 my $m = $mw->Menu();
 $m->add('command', -label => 'Exit',
         -command => sub { Tk::exit });

 my $l = $mw->Label(-text => "Mach 'n Rechtsklick!")->pack();

 $l->bind('<Button-3>' => sub { $m->Popup(-popover => 'cursor') });

 MainLoop;

oder du verwendest $m->post($x, $y) und ermittelst vorher mit Ev() an welche Stelle der User geklickt hat.

siehe
perldoc Tk::Menu

Grusz Christian.
,,Das perlt aber heute wieder...'' -- Dittsche
Froschpopo
 2005-04-01 19:03
#43010 #43010
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
danke funzt prima ! Aber noch ne Frage: wenn sich das Menü öffnet, ist oben sone gestrichelte Linie und dann erst erscheint "Exit". Wie kann ich das "Exit" ganz oben hinmachen?
coax
 2005-04-01 19:17
#43011 #43011
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
my $m = $mw->Menu(-tearoff => 0);
,,Das perlt aber heute wieder...'' -- Dittsche
Froschpopo
 2005-04-01 19:25
#43012 #43012
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
danke :-)
Froschpopo
 2005-04-01 19:31
#43013 #43013
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
kleines Problemchen:
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
26
27
sub SlurpBuddyList {
my @array = ();
@array = ("user1:asdefwe", "user2:sadfr", "user3:edfqwef");
RefreshBuddyList(@array);
}

sub RefreshBuddyList {
my $m;
my $user;
my $nickname;
for(@_) {
$m = $config{MainWindow}->Menu(-tearoff => 0);
$user = (split(/\:/, $_))[0];
$m->add(
'command',
-label => "Profil von $user anzeigen",
-command => sub { GotoUrl("http://127.0.0.1/cgi-bin/goto.pl?username=$user") }
);
$nickname = $config{MainWindow}->Label(
-text => $user,-background => 'white', -font => $config{Font}
);
$nickname->bind('<Button-3>' => sub { $m->Popup(-popover => 'cursor') });

$nickname->pack();

}
}

wenn ich dann mit der rechten Maustaste auf nen Username klicke, dann erscheint immer: "profil von user3 anzeigen".
Warum??? Die $user wird doch bei jedem Durchlauf neu gefüllt !
coax
 2005-04-01 19:42
#43014 #43014
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
versuch's mal mit
Code: (dl )
1
2
3
4
5
sub RefreshBuddyList {
my $user;
my $nickname;
for(@_) {
my $m = $config{MainWindow}->Menu(-tearoff => 0);
,,Das perlt aber heute wieder...'' -- Dittsche
Froschpopo
 2005-04-01 19:44
#43015 #43015
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
jetzt gehts danke :-)
ist aber komisch,
man muss also $m in jedem durchlauf komplett neu definieren?
coax
 2005-04-01 21:03
#43016 #43016
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Jupp, in deinen Code hat die Closure eine Referenz auf ein und die selbe Variable, in meinen jedesmal auf eine Andere.
(Korrigiert mich wenn ich damit falsch liege, bin nicht ganz so fit in den Perl-Interas.)
Das ist glaube ich in etwa so zu verstehen:
Code: (dl )
1
2
3
4
5
6
my $m;

for(1..10) {
   push(@refs, \$m);
}
print "$$_\n" for @refs;

Hier wird immer eine Referenz auf ein und die gleiche Variable (/gleiche Speicherstelle) auf's Array gepusht.
Code: (dl )
1
2
3
4
5
for(1..10) {
   my $m;
   push(@refs, \$m);
}
print "$$_\n" for @refs;

Hier ist es anders, die Referenz zeigt immer auf eine andere Variable.

Ich denke, dass duerfte man in etwa so vergleichen koennen.

Grusz Christian.
,,Das perlt aber heute wieder...'' -- Dittsche
<< >> 9 Einträge, 1 Seite



View all threads created 2005-04-01 18:27.