Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]4671[/thread]

Button

Leser: 1


<< >> 10 Einträge, 1 Seite
Gast Gast
 2003-11-17 09:00
#45109 #45109
Für eine anwendung benötige ich einen Button, über dessen Mausklick ich in eine schleife springen möchte.
In der schleife möchte ich so lange bleiben bis ich den button wieder los lasse.
Mein problem: erst mit 'Buttonrelease', also mit loslassen der maustaste komme in die in die schleife komme.
Mit bind habe ich mich versucht, aber da hat auch so gar nix funktioniert.
Weiss mir jemand einen rat?
helmut.heinkel@gmx.de
renee
 2003-11-17 11:39
#45110 #45110
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Also so kommst Du beim Drücken der Maustaste in die Schleife:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#! /usr/bin/perl

use Tk;

$bool = 1;

my $window = MainWindow->new();
my $button = $window->Button(-text => 'Drück mich');
$button->bind("<ButtonPress-1>",sub{while($bool){print "Hello";}});
$button->pack();

MainLoop;

Wie man das bei einem ButtonRelease wieder beendet, weiß ich auch nicht so genau, aber vielleicht hilft bald dieser Thread weiter...\n\n

<!--EDIT|renee|1069062365-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Crian
 2003-11-17 12:37
#45111 #45111
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Du kannst an das Klicken und an das Loslassen Funktionen binden. Beim Klicken kannst Du dann ja einen Repeat auf eine dritte Funktion auslösen, die Du dann beim Loslassen wieder aufhebst [falls das geht, ka ob oder wie] (oder irgendetwas anderes umstellst, so dass in der repeateten Funktion nichts mehr passiert - aber aufheben wär besser).
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
coax
 2003-11-17 14:34
#45112 #45112
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Hallo Helmut,

die Tk-Anwendung laeuft selbst in einer Loop in der alle Ereignisse behandelt werden, wuerdest du also nach Knopfdruck eine Subroutine aufrufen in der eine Endlosschleife etwas abarbeitet, kann die Tk-Anwendung auf nichts mehr reagieren, nur die Endlosschleife arbeitet weiter.
Jedes weitere Ereignis (hier ButtonRelease) kann von Tk dann nicht mehr wahrgenommen werden, das Programm kann also nicht weiter kontrolliert werden.
Da Tk eh schon in einer Schleife laeuft wuerde ich die nutzen und Anweisung mittels repeat ausfuehren.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl

use Tk;
use strict;
use warnings;

my $mw = new MainWindow;

my $b = $mw->Button(-text => 'Run')->pack();

my $id;
my $i;
$b->bind('<ButtonPress-1>' => sub { $id = $mw->repeat(0, sub {print ++$i}) } );
$b->bind('<ButtonRelease-1>' => sub { $id->cancel() } );

MainLoop();


Gruß coax.
,,Das perlt aber heute wieder...'' -- Dittsche
Crian
 2003-11-17 16:16
#45113 #45113
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Aha, so canceled man also repeat-Befehle, das wusste ich nicht, schick :)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
coax
 2003-11-18 02:46
#45114 #45114
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
[quote=Crian,17.11.2003, 15:16]Aha, so canceled man also repeat-Befehle, das wusste ich nicht, schick :)[/quote]
wusste es auch nicht mehr so genau, hab mal kurz ein Blick in's Buch geworfen. :)
,,Das perlt aber heute wieder...'' -- Dittsche
Crian
 2003-11-20 11:43
#45115 #45115
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
:)

Welches Buch benutzt Du denn?

Mein blödes Buch ist immer nicht da, wenn ich es brauche, entweder liegt es zu Hause rum, wenn ich es bei der Arbeit brauche oder andersherum....

Es lässt sich ja viel aus den Perldocs herausbekommen, aber leider nicht alles.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Dubu
 2003-11-23 00:26
#45116 #45116
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Es steht etwas versteckt in perldoc Tk::after. :)
coax
 2003-11-25 02:41
#45117 #45117
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
[quote=Crian,20.11.2003, 10:43]Welches Buch benutzt Du denn?[/quote]
"Einführung in Perl/Tk" von Nancy Walsh
In diesen Fall war es auch nur teilweise eine Hilfe.
Das Canclen wird auch nur an after beschrieben, den Rest muss man sich dann halt selbst denken.
Hab aber zur Sicherheit einen Blick in die Perldocs gewurfen.
,,Das perlt aber heute wieder...'' -- Dittsche
Crian
 2003-11-25 12:26
#45118 #45118
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Ok, das hab ich auch, dann hätte ich es also auch herausfinden können, wenn ich das Buch dabei gehabt hätte - beruhigend ;)

Heute hab ich es zur Abwechslung mal dabei :D
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< >> 10 Einträge, 1 Seite



View all threads created 2003-11-17 09:00.