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

Menubar ändern

Leser: 4


<< >> 9 Einträge, 1 Seite
Mako
 2007-12-06 13:11
#103500 #103500
User since
2007-10-05
31 Artikel
BenutzerIn
[default_avatar]
Hi,

ich möchte die Sprache meines Menubars im Programm von Deutsch auf Englisch (oder umgekehrt) wechseln können.

Mein Menubar sieht so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
my $datei = $menubar->cascade(-label => '~Datei',
-tearoff => 0);

$datei->command(-label => 'Neu', -command => \&neu);
$datei->command(-label => 'Öffnen...', -command => \&open);
$datei->command(-label => 'Speichern', -command => \&speichern);
$datei->command(-label => 'Speichern unter...', -command => \&speichernunter);
$datei->separator();
$datei->command(-label => 'Beenden', -command => [$mw=>'destroy']);


Jetzt dachte ich mir dass ich einfach statt z.B. 'Neu' eine Variable angebe (\$test) und diese dann einfach nach belieben ändern kann.
$test = 'Neu'.
Das Problem daran ist das es einfach nicht funktioniert. Statt 'Neu' steht jetzt REF(0x345..) an der Stelle.

Außerdem glaub ich kann ich nicht mit -textvariable arbeiten, sonder
muss -label verwenden. Kann man das irgendwie austricksen?

Danke
Mako
Siechfred
 2007-12-06 14:47
#103509 #103509
User since
2007-11-12
30 Artikel
BenutzerIn
[default_avatar]
Ich habe zwar keinen blassen Schimmer von Tk, aber -label scheint einen Skalar zu erwarten, keine Referenz auf einen solchen. Und die würdest Du mit
Code (perl): (dl )
\$test
ja übergeben. Lass' also mal den Backslash weg.

Siechfred
styx-cc
 2007-12-06 15:03
#103510 #103510
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Ne, Siechfried, so einfach ists nicht.
Geht nicht:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl -w
use strict;
use Tk;

my $test = 123;

my $mw = tkinit();
my $l1 = $mw->Label(-text => $test)->pack();
$mw->Button(-command => sub {chg_txt(\$test)} )->pack;

MainLoop;

sub chg_txt {
  my $test = shift;
  $$test = 'Testtext2';
  $mw->update();
}


Muss er bestimmt mit "configure" oder so machen
Pörl.
#Kein Kommentar
 2007-12-06 16:31
#103521 #103521
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
du könntest das aufbauen des menüs in eine sub packen.
beim sprache-wechseln könntest du die beschriftungsvariablen ändern
und das menü zerstören. mit der sub erstellst du es dann wieder mit der neuen sprache... hätte den vorteil, dass du nicht jedes menü-widget in einer eigenen variablen speichern musst.
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
Mako
 2007-12-07 12:50
#103551 #103551
User since
2007-10-05
31 Artikel
BenutzerIn
[default_avatar]
Ich hab das jetzt mal mit einer sub probiert, aber das geht immer noch nicht. Is versth nur nicht warum es nicht funktioniert. Beim ersten mal erstellt er den Menubar noch richtig, aber beim ändern generiert er den Menubar nicht mehr. Warum?
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
my $mw = MainWindow->new(-title=>"Test");
my $toplevel = $mw->toplevel;

my $n = 'Neu';
my $o = 'Öffnen..';
my $s = 'Speichern';
my $sp = 'Speichern unter...';
my $b = 'Beenden';


our $menubar;
Menu($n,$o,$s,$sp,$b);


sub Menu{

my $n = shift;
my $o = shift;
my $s = shift;
my $sp = shift;
my $b = shift;

$menubar = $toplevel->Menu(-type => 'menubar');
$toplevel->configure(-menu => $menubar);
my $datei = $menubar->cascade(-label => '~Datei',
-tearoff => 0);

$datei->command(-label => "$n", -command => \&neu);
$datei->command(-label => "$o", -command => \&open);
$datei->command(-label => "$s", -command => \&speichern);
$datei->command(-label => "$sp", -command => \&speichernunter);
$datei->separator();
$datei->command(-label => "$b", -command => [$mw=>'destroy']);
}


$mw->Button(-text=>'clear',-command => sub {&chance} )->pack;


MainLoop;


sub chance {
$menubar->destroy;
my $n = 'new';
my $o = 'open';
my $s = 'save';
my $sp = 'save as';
my $b = 'close';
Menu($n,$o,$s,$sp,$b);
}

styx-cc
 2007-12-07 13:05
#103552 #103552
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Schon mit "configure probiert"?
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
#!/usr/bin/perl -w
use strict;
use Tk;

my $mw = MainWindow->new(-title=>"Test");

my $toplevel = $mw->toplevel;
my $menubar = $toplevel->Menu(-type => 'menubar');
$toplevel->configure(-menu => $menubar);

my $datei = $menubar->cascade(-label => '~Datei',
                              -tearoff => 0);
my $n = $datei->command(-label => 'Neu', -command => \&neu);
my $o = $datei->command(-label => 'Öffnen', -command => \&open);

$mw->Button(-text=>'Change Text',-command => sub {&change_text} )->pack;

MainLoop;

sub change_text {
  $n->configure(-label => 'New');
  $o->configure(-label => 'Open');
}
Pörl.
Mako
 2007-12-07 13:10
#103553 #103553
User since
2007-10-05
31 Artikel
BenutzerIn
[default_avatar]
Ohh Gott!
Mann warum hab das nicht gleich probiert.

Danke!(es geht)
#Kein Kommentar
 2007-12-07 14:12
#103559 #103559
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
tschuldigung, ich meinte nicht das ganze menü, ich meinte den menübaum kannst du mit -> delete ('1.0', 'end') 'zerstören'.
sorry, das ich mich falsch ausgedrückt habe!
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
Mako
 2007-12-07 15:09
#103573 #103573
User since
2007-10-05
31 Artikel
BenutzerIn
[default_avatar]
Nein nicht umbedingt, wenn ich das richtig verstehe hätte ich den menübaum eh komplett zerstören müssen, weil ich ja alle Menüeinträge ändern wollte.
<< >> 9 Einträge, 1 Seite



View all threads created 2007-12-06 13:11.