perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 25
Click for quality!




11.02.2012 / 21:25

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragProblem mit Tk Modul
Seitenanfang
Hallo Miteinander,

ich benötige dringend Unterstützung bei einem Sccript, welches das Tk Modul nutzt(Eingabedatei suchen; Zeilennummerierung eintragen; Ausgabedatei definieren und speichern). Folgenden Code habe ich bis jetzt:


#!/usr/bin/perl

$|++;
use strict;
use warnings;

use Tk;

my $mw = new MainWindow;
$mw->geometry("550x200");

my $input_frame = $mw->Frame()->pack(-fill => 'x');
my $output_frame = $mw->Frame()->pack(-fill => 'x');
my $process_frame = $mw->Frame()->pack(-fill => 'x');

$input_frame->Label(-text => 'Eingabedatei: ')->pack(-side => 'left');

my $inputfile_entry = $input_frame->Entry(-width => 50)->pack(-side => 'left');

$input_frame->Button(-text => 'Eingabedatei suchen ',
-command => [\&getFile, 'INPUT', $mw, $inputfile_entry])->pack(-side => 'left');

$output_frame->Label(-text => 'Ausgabedatei:')->pack(-side => 'left');
my $outputfile_entry = $output_frame->Entry(-width => 50)->pack(-side => 'left');

$output_frame->Button(-text => 'Ausgabedatei definieren',
-command => [\&getFile, 'OUTPUT', $mw, $outputfile_entry])->pack(-side => 'left');

my $listbox = $process_frame->Listbox(-height => 250)->pack(-fill => 'both');
my $scroll = $listbox->Scrollbar(-command => [ 'yview', $listbox ]);

$listbox->configure(-yscrollcommand => [ 'set', $scroll ]);

$scroll->pack(-side => 'right',
-fill => 'y',
);
$process_frame->Button(-text => 'Zeilennummerierung hinzufügen',
-command => [\&addLinenumbers, $mw, $inputfile_entry, $listbox])->pack(-side => 'left');

$process_frame->Button(-text => 'Schreibe Ausgabedatei',
-command => [\&writeFile, $mw, $outputfile_entry, $listbox])->pack(-side => 'left');

$process_frame->Button(-text => 'Script beenden',
-command => sub { exit })->pack(-side => 'left');

MainLoop();

sub getFile {
my($action, $toplevel, $entry) = @_;

my($filename);

my $filetypes = [ ['Textfiles', ['.txt'] ] ];

if($action eq 'INPUT') {

$filename = $toplevel->getOpenFile(-defaultextension => '.txt',
-filetypes => $filetypes,
-title => 'Select inputfile...');
}
elsif($action eq 'OUTPUT') {
$filename = $toplevel->getSaveFile();
}
else {
warn "getFile(), no action specified!\n";
}

if($filename ne '') {
$entry->delete(0, 'end');
$entry->insert(0, $filename);
}
}

sub addLinenumbers {
my($toplevel, $in_entry, $listbox) = @_;

my($maxlines, $linenum);

$listbox->delete(0, 'end');

my $infile = $in_entry->get();

open(IN, '<', $infile) or (warn $! && return);
while(my $line = <IN>) {
chomp($line);
$line = ++$linenum . ' ' . $line;
$listbox->insert($linenum, $line);
}
close(IN);

}

sub writeFile {
my($toplevel, $out_entry, $listbox) = @_;

my $outfile = $out_entry->get();

open(OUT, '>', $outfile) or (warn $! && return);
print OUT "$_\n" for $listbox->get(0, 'end');
close(OUT);
}


Das Script lässt sich ohne Probleme aufrufen und es funktioniert alles bestens, nur die Funktion "Eingabedatei suchen" spuckt mir ständig eine Fehlermeldung aus:
"Tk::Error: bad file type "ARRAY(0x1bf9378)", should be "typeName {extension ?extensions ...?} ?{macType ?macTypes ...?}?" at C:/Perl/site/lib/Tk.pm line 320.
Tk callback for tk_getOpenFile
Tk callback for .frame.button
Tk::__ANON__ at C:/Perl/site/lib/Tk.pm line 247
Tk::Button::butUp at C:/Perl/site/lib/Tk/Button.pm line 111
<ButtonRelease-1>
(command bound to event)"
Momentan habe ich keine Ahnung woran es hängt. habe schon diverse andere Scripte mit Tk Modil getestet, die alle funktioniert haben.
Hat jemand einen hilfreichen Tipp?
Danke axel 19071

Datum: 26.04.2005-11:58

Beitragre: Problem mit Tk Modul
Seitenanfang
Hallo Axel,

habe dein Script unter Windows und UNIX getestet, läuft beide Male ohne Fehlermeldungen.

Aus den Fehlermeldungen entnehme ich, dass du unter Windows arbeitest (...at C:/Perl/site/lib/Tk.pm line 320.), dann solltest du die erste Zeile in deinem Script dementsprechend anpassen (Bei dir steht #!/usr/bin/perl statt #!c:\perl\bin\perl.exe).
Ich weis zwar nicht ob das mit deinem Problem zusammen hängt, kann aber in keinem Fall schaden;-)

Gruß Thomas

Datum: 26.04.2005-12:28

Beitragre: Problem mit Tk Modul
Seitenanfang
hallo tommy,
danke für den schnelle antwort. dein tipp hat leider nicht geholfen. auch mit der änderung erhalte ich eine fehlermeldung. die fehlermeldung weist irgendwie auf das tk modul hin (Tk callback for tk_getOpenFile
Tk callback for .frame.button
Tk::__ANON__ at C:/Perl/site/lib/Tk.pm line 247
Tk::Button::butUp at C:/Perl/site/lib/Tk/Button.pm line 111). aber ich kann das nicht nachvollziehen, weil alle anderen scripte ohne probs laufen!?

Datum: 26.04.2005-12:53

Beitragre: Problem mit Tk Modul
Seitenanfang
Syntax für getOpenFile:
#! /usr/bin/perl

use strict;
use warnings;
use Tk;

my $mw = MainWindow->new();
$mw->Button(-command => \&openF, -text => 'open')->pack();

MainLoop;

sub openF{
my $extensions = [["Textdateien",[".txt"]],
["Perl",[".pl",".pm"]],
["Test",[".ps"]]];
my $file = $mw->getOpenFile(-filetypes => $extensions);
}

Wichtig ist hierbei, wie die extensions definiert sind...

Datum: 27.04.2005-14:06

Beitragre: Problem mit Tk Modul
Seitenanfang
Hier kommt es wohl auf die Version von Tk an... Es scheint wohl eine alte Syntax zu geben, die mit {} arbeitet statt mit []...

Such mal in Google nach perl/tk getOpenFile...
Dort findest Du Beispiele mit der anderen Syntax...

Datum: 27.04.2005-14:08

Beitragre: Problem mit Tk Modul
Seitenanfang
hallo renee,

nach langem suchen habe ich mich entschieden mir eine frisches perl (5.6.1 build 638) von activestate zu ziehen. nach der installation lief das script plötzlich einwandfrei, komplett ohne fehlermeldung!? das habe ich auf drei rechnern getestet, immer erfolgreich. scheint wirklich an der tk-version zu liegen. trotzdem vielen dank für deine bemühungen.
axel

Datum: 27.04.2005-16:21

-






-
-