Thread [Tk] GUI für eine Konsolenanwendung implementieren
(27 answers)
Opened by vitek at 2014-03-28 14:24
Das insert ist mir klar.
Nur habe ich das Problem dass die GUI mit einer Unterfunktion erzeugt wird. Dort ist auch das Text widget lokal bekannt. Wenn jetzt aus dem außerhalb liegenden code auf das Textfeld zugegriffen werden soll (z.B. mittels insert) funzt es nicht, weil Textfeld ja unbekannt ist. Ich füge hier mal mein Beispiel an: Code (perl): (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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 use Encode; #use warnings; use Getopt::Std; # für Auswertung der Startparameter use Tk; # Notwendig für GUI use Tk::DropSite; # Drag&Drop in das Pfadauswahlfenster use Tk::ROText; # Drag&Drop in das Pfadauswahlfenster my %opts; $opt=""; $infile=""; $overwrite=0; $unicode=0; my $withgui=0; my @lines; # Feld für Pfadeingabe my $mw; # MainWindow für GUI my $out_text; # Ausgabefeld für LOG my $gui_fname ="Pfad\\zur\\Datei"; my $gui_output ="Ausgabefeld\n"; # Startparameter abfragen getopts("og",\%opts); &toolLog("renum Tool Version $rev\n\n"); # Parameter auswerten foreach (keys %opts) { if (($_ eq "o") && ($opts{$_} eq 1)) {$overwrite=1;} if (($_ eq "g") && ($opts{$_} eq 1)) {$withgui=1;} } # Wenn keine Parameter übergeben werden Abbruch mit Hinweis if ($#ARGV==-1 && $withgui==0) { &toolLog("USE: renum.pl options datei\n"); die; } # Pfadparameter auswerten foreach (@ARGV) { $infile = $_; } # Prüfen ob mit GUI gestartet werden soll if ($withgui==1) { &doGUI(); exit(); } &INIopenfile($infile); &INIselector; ######################### # GUI # ######################### sub doGUI { $mw = MainWindow->new; $mw->title("Renum.pl"); $mw->geometry('500x240'); $mw->minsize(500,240); # Minimalgröße des Fensters: 500 x 200 ########### Hauptfenster ############## my $frame1 = $mw->Frame; $frame1->pack(-side => "top", -fill => "both", -expand => "1", -padx => "2m", -pady => "2m"); ########### Ausgabefenster ########### # Rahmen my $out_frm = $frame1->Frame(-borderwidth => 2, -relief => "ridge"); $out_frm->pack(-side => "top", -anchor => "n", -expand => "1", -fill => "both"); # Scrollbar $scrollbar = $out_frm->Scrollbar( ); # Textfeld $out_text = $out_frm->ROText(-width => 80, -height => 5, -fg => 'black', -bg => 'white', -yscrollcommand => ['set' => $scrollbar],); #-state => "disabled"); $out_text->insert('end', $gui_output); $out_text->pack(-padx => 5, -pady => 5, -expand => "1", -fill => "both"); $scrollbar->configure(-command => ['yview' => $out_text]); #$scrollbar->pack(-side => 'right', -fill => 'y'); MainLoop(); } ######################### # allgemeine Funktionen # ######################### sub toolLog { # LOG Ausgabe my $param = shift; print ($param); $out_text->insert('end', $param); } Das woran es scheitert ist die Zeile $out_text->insert('end', $param); in der sub toolLog. Meldung: Can't call method "insert" on an undefined value at ... Last edited: 2014-04-04 11:48:11 +0200 (CEST) |