Schrift
[thread]5276[/thread]

tk::balloon und menu type menubar + cascade: der balloon wird nicht angezeigt

Leser: 2


<< |< 1 2 >| >> 15 Einträge, 2 Seiten
PerlProfi
 2007-01-06 11:52
#46057 #46057
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe ein großes Menü und würde gernezu einigen Einträgen eine Meldung in der Statusleiste bekommen, sobald der Benutzer mit der Maus über bestimmte Einträge fährt.

Leider funktioniert das nicht so, wie ich mir das vorgestellt habe.

Hier mal ein kurzes Beispiel:
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 'all';
use Tk;

my $mw = tkinit();

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

$menu->cascade(-label => "~Datei");

my $balloon = $mw->Balloon(-initwait => 1);
$balloon->attach($menu, -msg => ["Menü: Datei"]);

MainLoop;

__END__

Ich habe auch schon versucht die cascade()s zu attach()en, aber das kann Tk::Balloon leider nicht, weil eine Methode(OnDestroy, oder so ähnlich) nicht für cascade()s gefunden wird.
Die kann man ja auch nicht mit destroy() zerstören.

Jetzt dachte ich, dass würde mit einem anonymen Array als -msg/-statusmsg klappen, weil das so in der Doku steht. Leider funktioniert das aber auch nicht.

Kann mir jemand sagen, wie ich bestimmte Einträge eines Menüs mit einem Tooltip ausstatte?

MfG PerlProfi
renee
 2007-01-06 13:45
#46058 #46058
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
PerlProfi
 2007-01-06 14:25
#46059 #46059
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Wenn es nicht mit dem Balloon geht, werd ich wohl <Enter> nehmen:
$widget->bind("<Enter>", sub { $self->{StatusText} = "Neuer Statustext." })

MfG PerlProfi\n\n

<!--EDIT|PerlProfi|1168086422-->
renee
 2007-01-06 14:39
#46060 #46060
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was anderes wird Dir wohl nicht übrig bleiben ;-(
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
PerlProfi
 2007-01-06 15:23
#46061 #46061
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Jetzt hab ichs gerade mal eingebaut und getestet, da bekomme ich für alle cascade()s eine Fehlermeldung, dass sie kein bind() kennen, auch kein Tk::bind()...

Jetzt fällt mir auch nichts mehr ein.

Bei Menüs scheint einfach nichts zu funktionieren.
Auch in der widget demo funktioniert bei mir das Beispiel mit dem Balloon und Menüs nicht richtig.

Weiß vielleicht irgendjemand wie man das noch machen könnte?

Ansonsten muss ich da den Statustext weg lassen, das sieht aber irgendwie unschön aus.
Und wenn ich schon keinen speziellen Text festlegen kann, ist es denn möglich mit dem Tk::Balloon einen standard Text zu erzwingen?
Der dann angezeigt wird, wenn die Maus nicht über einem passenden Widget liegt?

MfG PerlProfi
ptk
 2007-01-07 02:04
#46062 #46062
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Wegen des Menü/Balloon-Problems: da werde ich mal drüberschauen. Wahrscheinlich ist das Feature zwischen Tk800 und Tk804 kaputt gegangen, vielleicht eine grab-Geschichte?

Der Standard-Text: kannst du vielleicht auf dein MainWindow ein Balloon legen? Oder mit -motioncommand/-postcommand etc. arbeiten?
PerlProfi
 2007-01-07 10:57
#46063 #46063
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Ich habe schon einen Balloon auf mein MainWindow gelegt, trotzdem wird der Text in der Statusbar gelöscht, wenn die Maus über ein Widget im MainWindow geht, dass keinen Balloon besitzt.

Allerdings bekomme ich meinen standard Text, wenn ich mit der Maus in einem Toplevel Fenster bin.
Das ist schonmal gut.

Wie kann ich es dann mit -motioncommand und -postcommand probieren?
Ich weiß ja leider nicht wie groß mein Hauptfenster gerade ist.
Am Anfang wird es maximiert, aber danach erlaube ich es dem Benutzer die Größe zu verändern.

Oder meinst du, dass ich den Balloon einfach stehen lassen kann, solange er über einem bestimmten Frame hockt?
Ich habe einen Menü-frame, aber das Menü steht eben über diesem Frame, desshalb konnte ich bisher auch damit nichts anfangen.

MfG PerlProfi
ptk
 2007-01-07 23:48
#46064 #46064
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Hier kannst du den Fix für das Tk::Balloon+Menuitem-Problem finden. Oder als Patch ist es einfach nur:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
--- Tixish/Balloon.pm   (revision 1074)
+++ Tixish/Balloon.pm (local)
@@ -256,6 +256,11 @@ sub grabBad {
return 0 if $g->isa('Tk::Menu');
return 0 if $g eq $client;

+ # Ignore grab check if $w is the balloon itself.
+ # XXX Why is this necessary? Is it possible to remove the grabBad
+ # condition in SwitchToClient altogether?
+ return 0 if $w->isa(__PACKAGE__);
+
# The grab is OK if $client is a decendant of $g. Use the internal Tcl/Tk
# pathname (yes, it's cheating, but it's legal).
PerlProfi
 2007-01-08 17:59
#46065 #46065
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Sehr vielen Dank, jetzt klappt alles wunderbar :)

MfG PerlProfi
renee
 2007-01-08 18:22
#46066 #46066
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Kannst Du vielleicht einen Beispielcode ins Tk-Tutorial im Wiki packen?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2007-01-06 11:52.