Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl TK - "Datei-> Öffnen" Dialogfeld
Hallo zusammen!
Ich habe folgendes Problem:
Ich möchte mit Perl/TK ein GUI erzeugen mit dem man unter anderem auch Dateien öffnen kann, wie man es aus allen gängigen Programmen kennt.
Die Menüleits ist kein Problem, aber wenn ich nun auf Datei->Öffnen gehe, möchte ich, dass das Dialogfeld zum auswählen der Datei erscheint.
Dafür muss es doch schon perl-module oder ähnliches geben, so dass man das Dialogfeld nicht selbst programmieren muss. Gleiches gilt auch für Datei->Speichern etc.
Kann mir irgendjemand helfen und mir sagen, ob und falls ja, wo solche Standard GUIs zu finden sind.
Vielen herzlichen Dank!
Gruß, Thomas
my @pdf_type = (['PDF files', '.pdf',],['PDF files', '.PDF'], );
my $file = $mw->getOpenFile(-filetypes => \@pdf_type);
print "Gewaehlte Datei: $file";
$mw ist das MainWindow-Objekt und die filetypes kannst Du auch weglassen, wenn es da keine Beschränkungen geben soll.
Diesen Code musst Du in den Callback für den Menüeintrag Datei -> Öffnen einbauen.
Für "Speichern":
my @pdf_type = (['PDF files', '.pdf',],['PDF files', '.PDF'], );
my $output = $mw->getSaveFile(-filetypes => \@pdf_type);
open my $fh, '>', $output or die $!;
print $fh 'Inhalt';
close $fh;
Hallo und danke für deine Hilfe.
Leider funktioniert es nicht. Ich erhalte folgende Fehlermeldung:
Tk::Error: Can't call method "GetOpenFile" on an undefined value at C:\Dokumente
und Einstellungen\Thomas\Desktop\gui.pl line 52.
(menu invoke)
Wer weiß Rat?
Hallo,
offenbar rufst Du die Methode auf, auf einer unbenutzen Variable.
Wenn $mw nicht dein Main-Window ist, dann ersetze in den beiden Beispielen $mw durch die Variable in der das Main-Window-Objekt landet.
Deinen Skript sollte von der Reihenfolge her irgendwie so aussehen:
use strict;
use Tk;
my $widget = MainWindow->new;
...
...
...
$widget->getOpenFile();
Hallo, Danke, du hast recht,
aber dennoch funbktioniert es nicht. Ich habe jetzt eine Fehlermeldung,
dass GetOptFile.pm nicht in @INC zu finden ist.
Ich habe aber TK::FileDialog bereits mittels ActiveState perl package manager installiert. Ich finde aber das Modul auch nicht.
In welchem Package man denn die nötigen Module?
"GetOptFile"?? das müsste GetOpenFile heißen. Kannst Du mal ein kleines Testprogramm posten, mit dem es nicht funktioniert?
Welche Perl-Version verwendest Du?
Dann kann ich Dir vielleicht mehr zu dem Fehler sagen.
Ja, natürlich GetOpenFile;
Hier Code, der nicht funktioniert:
#!/usr/local/bin/perl
use Tk;
require tk::GetOpenFile;
# Main Window
my $mw = new MainWindow;
my $label = $mw -> Label(-text=>"Hello World") -> pack();
my $button = $mw -> Button(-text => "Quit",
-command => [\&FileOpen])
-> pack();
MainLoop;
my $file;
sub FileOpen {
$mw->GetOpenFile()
}
UND HIER DIE FEHLERMELDUNG;
#!/usr/local/bin/perl
use Tk;
require tk::GetOpenFile;
# Main Window
my $mw = new MainWindow;
my $label = $mw -> Label(-text=>"Hello World") -> pack();
my $button = $mw -> Button(-text => "Quit",
-command => [\&FileOpen])
-> pack();
MainLoop;
my $file;
sub FileOpen {
$mw->GetOpenFile()
}
WENN ICH DIE ZEILE "Require.." entferne, dann kommt folgende Fehlermeldung:
Assuming 'require Tk::GetOpenFile;' at gui2.pl line 13
Tk::Error: Can't locate Tk/GetOpenFile.pm in @INC (@INC contains: E:/Programme/A
ctivePerl/site/lib E:/Programme/ActivePerl/lib .) at E:/Programme/ActivePerl/sit
e/lib/Tk/Widget.pm line 270.
Tk::Widget::_AutoloadTkWidget at E:/Programme/ActivePerl/site/lib/Tk/Widget.pm
line 268
Tk::Widget::AUTOLOAD at E:/Programme/ActivePerl/site/lib/Tk/Widget.pm line 338
main::FileOpen at gui2.pl line 13
Tk callback for .button
Tk::__ANON__ at E:/Programme/ActivePerl/site/lib/Tk.pm line 250
Tk::Button::butUp at E:/Programme/ActivePerl/site/lib/Tk/Button.pm line 175
<ButtonRelease-1>
(command bound to event)
Die Lösung ist hier einfach:
das require tk::GetOpenFile; kannst 'Du löschen, die Methode gehört zum Tk-Kern.
$mw->GetOpenFile in der vorletzten Zeile ändern in $mw->getOpenFile;
Wenn das Programm unter Windows läuft ist es ja mest egal aber die Shebang lautet üblicherweise:
#!/usr/bin/perl
ohne 'local', zumindest auf allen mir bekannten Maschinen.
Gruß,
Molaf
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.