Thread [Tk] GUI für eine Konsolenanwendung implementieren (27 answers)
Opened by vitek at 2014-03-28 14:24

vitek
 2014-04-04 11:47
#174626 #174626
User since
2009-12-02
36 Artikel
BenutzerIn
[default_avatar]
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)

View full thread [Tk] GUI für eine Konsolenanwendung implementieren