1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#!/usr/bin/perl use warnings; use strict; use Tk; my $mw = Tk::MainWindow->new(); my $btn = $mw->Button(-text => "Click to close", -command => sub { closeWindow($mw); } ); $btn->pack(-padx => 10, -pady => 10); Tk::MainLoop(); sub closeWindow { my $mw = shift; $mw->destroy(); }
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
#!/usr/bin/perl use warnings; use strict; use Tk; my $mw = Tk::MainWindow->new(); $mw->title("Window"); $mw->optionAdd("*font", "Arial 15 normal"); my $text = $mw->Text(-width => 80, -height => 10, -fg => 'black', -bg => 'white'); $text->pack(-padx => 10, -pady => 10); my $eingabe = $mw->Entry(-width => 60, -fg => 'black', -bg => 'white'); $eingabe->bind("<Return>", sub { processInput($eingabe, $text);} ); $eingabe->focus(); $eingabe->pack(-pady => 10); $mw->MainLoop(); sub processInput { my $eingabe = shift; my $text = shift; my $s = $eingabe->get(); $eingabe->delete(0, "end"); $text->insert("end", "$s\n"); }
2014-04-02T18:41:46 vitekIn deinem Beispiel ist die Variable $text im ganzen Script "sichtbar".
Auch das MainWindow wird "global" erzeugt. D.h. Du kannst problemlos
auf die widgets aus den Unterfunktionen zugreifen.
2014-04-02T18:41:46 vitekIch habe auf meiner Seite eine reine Konsolenanwendung, die mir einer GUI
(mittels Startparameter startbar) erweitert wird.
2014-04-02T18:41:46 vitekWenn ich jetzt neuen Text in mein Textfeld anfügen lassen möchte, komme ich
nicht so richtig weiter. Die Unterfunktionen des scripts können auf das
Textfeld widget nicht zugreifen.
QuoteWann soll denn neuer Inhalt in das Textfeld eingefügt werden? Wenn auf einen Button geklickt wird? Oder nach einer gewissen Zeit von selbst? Oder wenn dieses Berechnungsskript etwas ausgibt?
$textwidget->insert('end', $weiterer_text);
1 2
my $t = $mw->Scrolled('Text')->pack(-fill => 'both', -expand => 1); $t->insert('end', 'mein Text');
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); }
1 2 3 4 5 6 7 8
# LOG Ausgabe sub toolLog { my $param = shift; print $param; # gebe Log in GUI aus, wenn verfügbar $out_text->insert('end', $param) if defined $out_text; }
2014-04-02T20:31:02 hlubenowGuck' Dir auch mal "Tk::Scrolled" an, das ist ein Textfeld, das man scrollen kann.
1
2
3
4
5
6
7
8
my $empty_button=$mw->Button(
-text => 'EMPTY',
-command => sub{
if($out_text and $running) {
$out_text->delete(0,'end');
}
});
$empty_button->pack();
1
2
3
4
5
6
7
Tk::Error: bad text index "0" at C:/Program Files (x86)/Perl/lib/Tk.pm line 252.
Tk callback for .frame.frame.rotext
Tk callback for .button1
Tk::__ANON__ at C:/Program Files (x86)/Perl/lib/Tk.pm line 252
Tk::Button::butUp at C:/Program Files (x86)/Perl/lib/Tk/Button.pm line 111
<ButtonRelease-1>
(command bound to event)
2014-04-14T12:05:42 vitekCode: (dl )Tk::Error: bad text index "0"
2014-04-03T08:55:54 GUIfreund... lies dir den Abschnitt index durch.