Leser: 22
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
use Time::HiRes qw(sleep); use Tk; use Tk::Text; use Tk::Scrollbar; #================================ Variablen =========================================================== $trigger = 0; ################################# TK-Abschnitt ######################################################## #================================ Hauptfenster ======================================================== $HF = new MainWindow (); $HF->geometry('430x350'); #================================ Text-Frame ========================================================== $Frame1 = $HF -> Frame(-width => 427, -height => 220,-borderwidth => 3, -relief => groove, -bg => black); $Frame1->place(-x=> 2, -y=> 19); $Textframe = $Frame1->Scrolled(Text, -wrap,none, -scrollbars => 'se', -height => 12, -width => 55, -bg => black, -fg => white)->pack(-expand => 'yes', -fill => 'both', -side => 'left'); #================================ Buttons ============================================================= $BtnStart = $HF->Button(-text=>"START", -command => sub {$trigger = 0;erstell_daten();}, -borderwidth => 2,-relief => raised,-width => 14, -font=>"Century 10"); $BtnStart->place(-x=> 2, -y=>260); $BtnStop = $HF->Button( -text=>"STOP", -command => sub {$trigger = 1;}, -borderwidth => 2,-relief => raised,-width => 14, -font=>"Century 10"); $BtnStop->place(-x=> 140, -y=> 260); $BtnQuit = $HF->Button( -text=>"Quit", -command => sub{exit;},-width => 14, -borderwidth => 2,-relief => raised, -font=>"Century 10"); $BtnQuit->place(-x=> 280, -y=> 260); MainLoop(); ################################# Ende TK-Abschnitt ################################################### sub erstell_daten () { while(1) { if($trigger eq 1){return} sleep 1; $zaehler++; $Textframe->insert("end", "\n$zaehler"); $HF->update(); } }
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
use Time::HiRes qw(sleep); use Tk; use Tk::Scrollbar; #================================ Variablen =========================================================== $trigger = 0; $max_zeilen = 50; ################################# TK-Abschnitt ######################################################## #================================ Hauptfenster ======================================================== $HF = new MainWindow (); $HF->geometry('430x350'); #================================ Text-Frame ========================================================== $Frame1 = $HF -> Frame(-width => 427, -height => 220,-borderwidth => 3, -relief => groove, -bg => black); $Frame1->place(-x=> 2, -y=> 19); $Textframe = $Frame1->Scrolled(Text, -wrap,none, -scrollbars => 'se', -height => 12, -width => 55, -bg => black, -fg => white)->pack(-expand => 'yes', -fill => 'both', -side => 'left'); #================================ Buttons ============================================================= $BtnStart = $HF->Button( -text=>" START ", -command => sub {$trigger = 0;$timer = $HF->repeat(200, sub{Ausgabe();})}, -font=>"Century 10"); $BtnStart->place(-x=> 2, -y=>260); $BtnStop = $HF->Button( -text=>" STOP ", -command => sub {$trigger = 1;}, -font=>"Century 10"); $BtnStop->place(-x=> 140, -y=> 260); $BtnQuit = $HF->Button( -text=>" QUIT ", -command => sub{exit;}, -font=>"Century 10"); $BtnQuit->place(-x=> 280, -y=> 260); MainLoop(); ################################# Ende TK-Abschnitt ################################################### sub Ausgabe () { if($trigger eq 1) { #======= Stoptext ausgeben $Textframe->insert("end", "\nGestoppt"); #===== Anzahl Ausgabe-Zeilen begrenzen if($zaehler > $max_zeilen){$Textframe->delete('0.0', "2.0");} #======= Ausgabefenster-Scrollbalken auf letzten Eintrag stellen $Textframe->yview(moveto => '1.0'); #======= Timer canceln $timer->cancel; #======= Stop Sub return; } $zaehler++; #===== Anzahl Ausgabe-Zeilen begrenzen if($zaehler > $max_zeilen){$Textframe->delete('0.0', "2.0");} #===== Scrollbalken auf den letzten Eintrag stellen $Textframe->yview(moveto => '1.0'); $Textframe->insert("end", "\n$zaehler"); }
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
use Time::HiRes qw(sleep); use threads; use threads::shared; use Tk; use Tk::Scrollbar; #====================================================================================================== # Variablen belegen #====================================================================================================== my $durchgaenge:shared = 0; my $infotext:shared = ""; my $die:shared = 0; ######################### T K - T E I L ############################################################### #====================================================================================================== # Hauptfenster #====================================================================================================== $HF = new MainWindow (); $HF->geometry('431x350'); #====================================================================================================== # Frames #====================================================================================================== $FrInfo = $HF -> Frame(-width => 427, -height => 220,-borderwidth => 3, -relief => groove, -bg => black); $FrInfo->place(-x=> 2, -y=> 19); $FrInfo->packPropagate(0); $txtInfo = $FrInfo->Scrolled(Text,-wrap,none,-bg => black,-foreground => white,-scrollbars => 'se', -height => 14,-width => 60, -font => "times -16 bold")->pack(-expand => 'yes', -fill => 'both', -side => 'left'); #======================================================================================================== # Buttons #======================================================================================================== $BtnStart = $HF->Button(-text =>"START", -command => sub {$die = 0;start_thread();$BtnStop->configure(-state=>'active');$timer = $HF->repeat(100,sub{});}, -width => 14, -font =>"Century 10"); $BtnStart->place(-x=> 2, -y=>260); $BtnStop = $HF->Button( -text=>"STOP", -command => sub {$die = 1;$BtnStop->configure(-state=>'disabled');$timer->cancel();}, -width => 14, -state => 'disabled', -font =>"Century 10"); $BtnStop->place(-x=> 140, -y=> 260); $BtnQuit = $HF->Button( -text =>"Quit", -command => sub{exit;}, -width => 14, -font =>"Century 10"); $BtnQuit->place(-x=> 280, -y=> 260); MainLoop(); ######################### ENDE T K - T E I L ########################################################## sub start_thread() { $thread = threads->create( \&start ); $thread->detach; } sub start { while(1) { if($die){return} sleep 0.2; $durchgaenge++; #===== Scrollbalken auf den letzten Eintrag stellen $txtInfo->yview(moveto => '1.0'); #===== Ausgabetext in Ausgabefenster schreiben $txtInfo->insert("end", "$durchgaenge\n"); } }
2011-01-24T19:32:47 rommiWas mit perboard.de los ist weiss niemnad hier? Ich frage nur weil ich da auch mal vor einiger Zeit ein paar Fragen gestellt habe und wollte mir meine Fragen nochmal anschauen, aber die scheinen garnicht mehr online zu sein...
2011-01-25T11:25:21 rommiUnd die wären? Wenn Du Tk und threads zusammen einsetzt, musst Du darauf achten, dass threads *vor* Tk geladen wird. Wenn ich heute abend Zeit habe, poste ich mal Code aus einem älteren Projekt von mir...Ich denke von daher ist die Thread-Variante eher geeignet aber so wie ich es bis jetzt mache bekomme ich noch Fehlermeldungen.