Schrift
[thread]12224[/thread]

Problem(hash?) mit Perl/Tk beim Modul Tk::Help

Leser: 1


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
nichtda
 2008-07-23 07:46
#112467 #112467
User since
2008-07-23
3 Artikel
BenutzerIn
[default_avatar]
Habe die Perlversion v5.10.0 (MSWin32-x86-multi-thread) von ActiveState (ActivePerl) mit Tk 804.028 für Windows XP SP3 auf einem Quadcore von Intel.

Mit dem Modul Tk::Help (v0.2) habe ich ein Problem mit folgender Fehlermeldung:
Quote
error:Not a HASH reference at C:/Perl/site/lib/Tk/Help.pm line 152.

Tk::Error: Not a HASH reference at C:/Perl/site/lib/Tk/Help.pm line 152.
Tk::Widget::Callback at C:/Perl/site/lib/Tk/Widget.pm line 1149
Tk::HList::Button1 at C:/Perl/site/lib/Tk/HList.pm line 186
<Button-1>
(command bound to event)
error:Not a HASH reference at C:/Perl/site/lib/Tk/Help.pm line 152.


Wenn die Software gestartet wird, so erscheint ein kleines Fenster und dann dort unter Help => Help Contents klicken, dann auf einen der Punkte links, dann kommt die genannte Fehlermeldung.

Beispielcode:
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
    use Tk;
use Tk::Help;

my $main = MainWindow->new(-title => "My Application");
$main->configure(-menu => my $menubar = $main->Menu);
my $filemenu = $menubar->cascade(-label => "~File",
-tearoff => 0);
my $helpmenu = $menubar->cascade(-label => "~Help",
-tearoff => 0);
$filemenu->command(-label => "E~xit",
-command => sub{$main->destroy});
$helpmenu->command(-label => "~Help Contents",
-command => sub{showhelp()});

MainLoop;
1;

sub showhelp {
@helparray = ([{-title => "My Application",
-header => "My Application Help",
-text => "This is a description of my application for the help."}],
[{-title => "Section 1",
-header => "\n\nSection 1 Help",
-text => ""},
{-title => "1st Feature",
-header => "The 1st Feature",
-text => "This is the text describing the 1st feature of section 1."},
{-title => "2nd Feature",
-header => "The 2nd Feature",
-text => "This is the text describing the 2nd feature of section 1."}],
[{-title => "Section 2",
-header => "\n\nSection 2 Help",
-text => ""},
{-title => "1st Feature",
-header => "The 1st Feature",
-text => "This is the text describing the 1st feature of section 2."},
{-title => "2nd Feature",
-header => "The 2nd Feature",
-text => "This is the text describing the 2nd feature of section 2."}]);

my $help = $main->Help(
-title => "My Application - Help",
-variable => \@helparray);
}


In älteren Perlversionen wie 5.8.x tritt das Problem nicht auf.
Vielleicht weiss einer Rat oder ein vergleichbares Modul um schnell und einfach eine kleine Hilfe mit Perl/Tk zu erstellen.
Struppi
 2008-07-23 12:08
#112470 #112470
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Bei mir läuft dein skript einwandfrei (nachdem ich es strict gemacht habe, aber da fehlt nur ein my)
renee
 2008-07-23 12:25
#112471 #112471
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@Struppi: Welche Perl und Tk-Version?
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/
Struppi
 2008-07-23 12:47
#112472 #112472
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Windows XP

This is perl, v5.8.7 built for MSWin32-x86-multi-thread
(with 14 registered patches, see perl -V for more detail)

Binary build 815 [211909] provided by ActiveState http://www.activestate.com/
ActiveState is a division of Sophos.

Name: Tk
Version: 804.028

Edit: oops, hab den Abschnitt unter dem Quellcode nicht gelesen.
nichtda
 2008-07-28 22:43
#112837 #112837
User since
2008-07-23
3 Artikel
BenutzerIn
[default_avatar]
Habe eine Lösung gefunden, die ich als leicht "verrückt" empfinde...

In der Datei Help.pm (von Tk::Help) einfach die Zeile suchen:
-browsecmd => sub{&populatedetails},

und durch folgendes ersetzen:
-browsecmd => \&populatedetails,

Damit gehts jedenfalls unter Perlversion v5.10
#Kein Kommentar
 2008-08-03 14:39
#113041 #113041
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
das ist nicht verrückt... soviel ich weiß wird der '-browsecmd'-methode parameter
übergeben, welches entry vom benutzer ausgewählt wurde.
bei der direkten referenzierung werden die parameter übergeben, wenn du jedoch erst eine anonyme subroutine erstellst (mit 'sub'), dann werden die parameter an die anonyme sub übergeben, nicht jedoch an die populatedetails()-funktion.

das hier müsste auch funktionieren:
Code: (dl )
-browsecmd => sub{populatedetails(@_);},
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
pq
 2008-08-03 14:56
#113042 #113042
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
#Kein Kommentar+2008-08-03 12:39:36--
bei der direkten referenzierung werden die parameter übergeben, wenn du jedoch erst eine anonyme subroutine erstellst (mit 'sub'), dann werden die parameter an die anonyme sub übergeben, nicht jedoch an die populatedetails()-funktion.

doch. der aufruf &funktion ist in dieser hinsicht derselbe wie funktion(@_).
das & sorgt dafür, dass @_ einfach weitergegeben wird.
deshalb (und nicht nur deshalb) rate ich auch bei normalen sub-aufrufen immer vom & zeichen ab.

warum es hier nicht funktioniert, frage ich mich allerdings auch.

was macht denn folgender code bei der betroffenenen 5.10er version:
Code (perl): (dl )
1
2
3
4
5
sub foo { &bar }
sub bar { print "bar(@_)" }
foo(23,24);
__END__
bar(23 24)


edit: "bei der betroffenen 5.10er version" ergänzt, da offenbar nicht klar geworden ist, warum
ich den code geschrieben habe
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Dubu
 2008-08-04 02:41
#113051 #113051
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
pq+2008-08-03 12:56:10--
was macht denn folgender code bei der 5.10er version:
Code (perl): (dl )
1
2
3
4
5
sub foo { &bar }
sub bar { print "bar(@_)" }
foo(23,24);
__END__
bar(23 24)

Es kommt "bar(23 24)" heraus, wie es sein sollte.

"This is perl, v5.10.0 built for i486-linux-gnu-thread-multi ..."
pq
 2008-08-04 12:00
#113055 #113055
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Dubu+2008-08-04 00:41:39--
"This is perl, v5.10.0 built for i486-linux-gnu-thread-multi ..."

ich glaube, interessant wäre hier die version von "nichtda".


edit: ok, für alle verständlicher:
ch glaube, interessant wäre hier das verhalten der version von "nichtda".
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
renee
 2008-08-04 12:15
#113057 #113057
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Steht ganz oben...
Quote
Habe die Perlversion v5.10.0 (MSWin32-x86-multi-thread) von ActiveState (ActivePerl) mit Tk 804.028 für Windows XP SP3 auf einem Quadcore von Intel.
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 >| >> 13 Einträge, 2 Seiten



View all threads created 2008-07-23 07:46.