Thread Permanenten Output in Frame ausgeben. (4 answers)
Opened by rommi at 2008-12-09 14:40

rommi
 2008-12-09 14:40
#116997 #116997
User since
2005-03-03
54 Artikel
BenutzerIn
[default_avatar]
Hallo Zusammen,

möchte gerne folgendes erstellen: Ein Haupffenster, ein Anzeige-Frame im Haupftfenster und ein Button.

Im Anzeige-Frame soll ein Output wie in einer Dos-Box (mit Scrollbalken) ausgegeben werden können. Mit dem Button soll der Output im Anzeige-Frame gestartet und angehalten werden können. D.h. wenn man auf den Button klickt soll der Output im Anzeige-Frame ausgegeben werden und wenn man auf denselben Button nochmal klickt soll der Output für eine beliebige Zeit angehalten bzw. wieder forgesetzt werden können. Sowie z.B. mit der Pause-Taste bei einem Dos-Fenster. Es soll also nur ein Button sein der Start und Pause regelt (schon aus Platzgründen!). Ich habe mal nachstehed ein ungefähres Konstrukt (nur zur groben Darstellung) erstellt.

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
#================================
#               Variablen
#================================
$ButtontextS    = "Start";
$ButtontextP    = "Pause";
$ButtontextW    = "Weiter";
$torkel         = 1;
$zaehler                     = 0;
$zahl           = 50;
#================================
#               Hauptfenster
#================================
$Hf = new MainWindow (-title => "Test");
$Hf->geometry('400x300');
$Hf->geometry('+10+10');
#================================
#               Anzeige-Frame (bzw. Widget)
#================================
$FrAnzeige      = $Hf->Frame(-borderwidth, 3,-relief, ridge)
->pack();
$Anzeigefenst   = $FrAnzeige->Scrolled(Text,-wrap,none, 
                                        -scrollbars,se,         
                                        -height,14, 
                                        -width,80) 
->pack();
#================================
#               Buttons
#================================
$BtnStart       = $Hf->Button(-text => "Start")
->pack(-side => 'left',-expand => "1", -fill => both);

$BtnQuit        = $Hf->Button(-text => "Abbrechen", -command => [ $Hf => 'destroy'])
->pack(-side => 'left',-expand => "1", -fill => both);
#================================
#               Bindung
#================================
$BtnStart->bind('<Button-1>', 
        sub
        {
            if($torkel eq 1)
            {
                $BtnStart->configure(-text => "$ButtontextP");
                $torkel--;
                start();
            }
            else
            {
                $BtnStart->configure(-text => "$ButtontextW");
                $torkel++;
                stop();
            }

         }
);
#================================
# Tk-Abschlussanweisung
#================================
MainLoop();
#================================
#               Unterprogramm
#================================
sub start 
{
   while ()
   {
        # hier soll irgendein Code ausgeführt werden
        # und der Output soll dann im Anzeigeframe
        # erscheinen
        # z.B.

        $zahl = $zahl + $zaehler++;
        print "\nZahl: $zahl"; 
        sleep 1;
   }
}

sub stop 
{
        # Hier soll der Output zeitweise angehalten
        # werden können
}


Also dass sind dabei meine Probleme:
1) Der Output vom Unterprogramm soll im Anzeigeframe, analog wie bei einem Dos-Fenster, ausgegeben werden. Ich denke ne Listbox ist da nicht so geeignet. Gibts da schon irgendein Widget dass für solche Sachen am besten
geeignet ist? Canvas ist auch nicht so optimal für so ne Sache.

2) Es wird permanent neuer Output erzeugt und der soll auch immer gleich im Anzeigeframe ausgegeben werden. Dabei soll aber das Haupfenster nicht blockiert werden. Ich denke das ich da wohl mit eval arbeiten muss, oder? Weil sonst läuft zwar die Sub los aber gibt das Haupffenster nicht frei!!

3) Und dann soll durch Klicken auf den Button der Output zeitweise angehal-ten werden können und natürlich wieder fortgesetzt werden können.. hmmmm?

Ich komm im Moment nicht weiter. Wer kann mir ein bisschen auf die Sprünge helfen. Danke im voraus fürs Helfen :-) ! Gruss rommi

View full thread Permanenten Output in Frame ausgeben.