Problem mit TK: Teil eines Menüs löschen

04/08/2010 - 11:36 von wolf | Report spam
Hallo,

ich habe ein Problem mit TK beim löschen von menü eintràgen.
Mein menü sieht ca. so aus:


|Choose Settings|

|New |
|Rename |
|Delete |

| Setting1 |
|* Setting2 |
| Setting3 |

etc.

Das sternchen bedeutet hier ein Hàkchen.

Der untere Teil des Menüs ist im prinzip variabel da er auf dem Inhalt
eines Unterordners basiert. Also gibt es zu jedem Eintrag "SettingX"
auch eine Datei namens "SettingX.set"

Meine Idee zur Handhabung dieses Teils des Menüs ist - es einfach zu
entfernen und neu aufzubauen wenn sich der Inhalt des Unterordners àndert.

Mein witziges Problem ist nun aber, das ich es NICHT schaffe,
irgendetwas von diesem Menü zu löschen:

z. b. wirft: $win{menu2}->delete(2,4);

Tk::Error: Can't locate object method "destroy" via package
"Tk::Menu::Radiobutton" at supportfiles/RCB.pl line 287.
(menu invoke)

Hier ist der Code der das Menü aufbaut.

$win{menu2} = $win{mbar}->cascade(
-label => '~Chose Setting', -tearoff => 0);
$win{menu2}->command(-label => 'New',
-command => [\&RCBcmd, 'm2_new']); $win{menu2}->command(-label
=> 'Rename',
-command => [\&RCBcmd, 'm2_ren']);
# ...
$win{menu2}->separator;
foreach my $key ( sort keys %preffiles ) {
$preffiles{$key} = $win{menu2}->radiobutton(
-label => $key, -variable => \$win{prefmenu},
-command => [\&RCBcmd, 'm2_pref']);
}

-
Hab ich irgendwie ein Brett vorm Kopf ? Was muss ich tun?


Gruß, wolf
 

Lesen sie die antworten

#1 K. Wittrock
06/08/2010 - 20:11 | Warnen spam
wolf machte das folgende Beispiel :

Hallo Wolf,


ich habe ein Problem mit TK beim löschen von menü eintràgen.
Mein menü sieht ca. so aus:


|Choose Settings|

|New |
|Rename |
|Delete |

| Setting1 |
|* Setting2 |
| Setting3 |

etc.

Das sternchen bedeutet hier ein Hàkchen.

Der untere Teil des Menüs ist im prinzip variabel da er auf dem Inhalt
eines Unterordners basiert. Also gibt es zu jedem Eintrag "SettingX" auch
eine Datei namens "SettingX.set"

Meine Idee zur Handhabung dieses Teils des Menüs ist - es einfach zu
entfernen und neu aufzubauen wenn sich der Inhalt des Unterordners àndert.

Mein witziges Problem ist nun aber, das ich es NICHT schaffe, irgendetwas
von diesem Menü zu löschen:

z. b. wirft: $win{menu2}->delete(2,4);

Tk::Error: Can't locate object method "destroy" via package
"Tk::Menu::Radiobutton" at supportfiles/RCB.pl line 287.
(menu invoke)



Diese Meldung bekomme ich bei
$preffiles{$key}->delete(<irgendwas>);
Bei deinem Kode erhalte ich die Variante
... via package "Tk::Menu::Cascade" ...
Löschen kann ich nur mit
$win{mbar}->delete(<n>);
Dabei wird der n-te Button in der Menübar gelöscht. Hoffentlich kannst
du das gebrauchen. Eintàge in einem Menü zu löschen habe ich nicht
geschafft.

Leider hast du nicht mitgeteilt, wie du deine Menübar erstellt hast.
Bei mir geschah das mit
$mw->configure(-menu => my $menubar = $mw->Menu);
($mw ist mein MainWindow).

Wenn dir das Löschen eines kompletten Menüs nichts nützt, sehe ich noch
2 Möglichkeiten:

a) Nimm in der Menübar statt der Cascade einen Button, der das
Aufpoppen eines Fensters bewirkt, in dem die Auswahlliste steht (IMHO
ist das Poppen in "Mastering Perl/Tk" lausig beschrieben).

b) Erzeuge deine Menübar mit
$menubar = $mw->Frame(..)->pack(...);
und die Buttons darin mit
$menubar->Menubutton(...)->pack(...);
Mit
$menu = $butt<n>->Menu(...);
$$butt<n>->configure(-menu => $menu);
sollte man dann das Menu austauschen können, wobei der Menubutton
erhalten bleibt (nicht getestet).

HTH.

Gruß

Klaus

Meine Email-Adr. lautet
K<ohne_Punkt_und_Komma>Wittrock<Klammeraffe>web.de

Ähnliche fragen