Perl Tk, Windows, Entry, Backspace
am 02.07.2007 13:43:14 von Robert Berghaus
Hallo
Mir ist aufgefallen, daß ab und zu die Backspace Taste nicht=20
funktioniert, nach Benutzung der Cursor Tasten geht es dann aber=20
wieder.
Ist das ein bekanntes Problem oder muß ich da mal weiter nachforschen?
Es ist kein validate gesetzt, meine Funktionen sollten da also=20
nichts anrichten.
--=20
Schönen Gruß aus dem Bergischen Land
Robert
Re: Perl Tk, Windows, Entry, Backspace
am 02.07.2007 17:14:21 von Ch Lamprecht
Robert Berghaus schrieb:
> Hallo
>
> Mir ist aufgefallen, daß ab und zu die Backspace Taste nicht
> funktioniert, nach Benutzung der Cursor Tasten geht es dann aber wieder.
> Ist das ein bekanntes Problem oder muß ich da mal weiter nachforschen?
> Es ist kein validate gesetzt, meine Funktionen sollten da also nichts
> anrichten.
>
Hallo,
hast du ein Beispiel, an dem man das reproduzieren kann?
Grüße, Christoph
--
use Tk;use Tk::GraphItems;$c=tkinit->Canvas->pack;push@i,Tk::GraphItems ->
TextBox(text=>$_,canvas=>$c,x=>$x+=70,y=>100)for(Just=>anoth er=>Perl=>Hacker);
Tk::GraphItems->Connector(source=>$i[$_],target=>$i[$_+1])fo r(0..2);
$c->repeat(30,sub{$_->move(0,4*cos($d+=3.16))for(@i)});MainL oop
Re: Perl Tk, Windows, Entry, Backspace
am 02.07.2007 19:53:33 von Robert Berghaus
Hallo Christoph
Ch Lamprecht schrieb:
> Robert Berghaus schrieb:
>> Hallo
>>
>> Mir ist aufgefallen, daß ab und zu die Backspace Taste nicht=20
>> funktioniert, nach Benutzung der Cursor Tasten geht es dann aber wiede=
r.
>> Ist das ein bekanntes Problem oder muß ich da mal weiter nachforsche=
n?
>> Es ist kein validate gesetzt, meine Funktionen sollten da also nichts =
>> anrichten.
>>
> Hallo,
>=20
> hast du ein Beispiel, an dem man das reproduzieren kann?
Ich hatte befürchtet, daß Du danach fragst. ;-)
Ich werde morgen mal versuchen ein solches zu bauen. Mir ging es=20
zunächst mal darum zu erfahren, ob dieses Verhalten bekannt ist.=20
Dem scheint wohl nicht so zu sein.
--=20
Schönen Gruß aus dem Bergischen Land
Robert
Re: Perl Tk, Windows, Entry, Backspace
am 03.07.2007 15:24:27 von Robert Berghaus
Hallo Christoph
Ch Lamprecht schrieb:
> Robert Berghaus schrieb:
>> Hallo
>>
>> Mir ist aufgefallen, daß ab und zu die Backspace Taste nicht=20
>> funktioniert, nach Benutzung der Cursor Tasten geht es dann aber wiede=
r.
>> Ist das ein bekanntes Problem oder muß ich da mal weiter nachforsche=
n?
>> Es ist kein validate gesetzt, meine Funktionen sollten da also nichts =
>> anrichten.
>>
> Hallo,
>=20
> hast du ein Beispiel, an dem man das reproduzieren kann?
Nicht nur das, sondern auch den Fehler eingekreist (war _auch_=20
meiner).
Das Beispiel ist unten. Die relevanten Zeilen sind:
if (! $w->selectionPresent() ) {
1. $w->selectionAdjust(0);
1. $w->selectionTo('end');
2. $w->selectionRange(0, 'end') if ( $w->index('end') );
}
in der Funktion AllgemeinesFocusIn.
Ich wollte zunächst beim Notebook erreichen, daß auch beim ersten=20
Aufruf schon der Inhalt des Eingabefeldes mit dem Fokus selektiert=20
ist. Die Funktionalität habe ich dann für ein anderes=20
Eingabefenster übernommen.
Mein erster Ansatz war, selectionRange zu nehmen (ohne die=20
if-Abfrage dahinter). Das führt bei einem leeren Text aber zu=20
einem Tk-Fehler. Mit selectionAdjust und selectionTo schien es=20
dann zu funktionieren (auch wenn ich die Beschreibung der=20
Funktionen nicht richtig verstanden habe). Wahrscheinlich habe ich=20
bisher nie versucht, einen neuen Text einzugeben und mit Backspace=20
zu löschen. Sobald der Cursor einmal bewegt wird, funktioniert es=20
nämlich.
Das dürfte wieder einer der Fehler sein, die nur 'Neulinge'=20
entdecken ;-)
Beispielprogramm:
#!perl -w
use strict;
use Tk;
use English;
my ($mw, $Frame);
$mw =3D tkinit; #MainWindow->new();
$mw->configure(-title =3D> "Backspace Testfenster");
$Frame =3D $mw->Frame->pack(-side =3D> "bottom", -fill =3D> "x");
my $sStatusText =3D "";
$Frame->Label(-textvariable =3D> \$sStatusText,
-anchor =3D> 'w',
-width =3D> 50)->pack(-side =3D> "bottom",
-fill =3D> "x",
);
# Frame für FTP Daten
my $FTP_Name =3D "anonymous";
my $FTP_Passwort =3D "passwort";
$Frame =3D $mw->Frame->pack(-side =3D> "top");
$Frame->Label(-text =3D> "FTP Name",
-justify =3D> "left",
-anchor =3D> "w",
-background =3D> "white",
-width =3D> 15,
)->grid(-row =3D> 2, -column =3D> 0, -padx =3D> 2, -pady=20
=3D> 2);
my $eFTP_Name =3D $Frame->Entry(-textvariable =3D> \$FTP_Name,
-justify =3D> "left",
-background =3D> "yellow",
-width =3D> "15",
)->grid(-row =3D> 2,=20
-column =3D> 1, -padx =3D> 2, -pady =3D> 2);
$eFTP_Name->bind('' =3D> [\&AllgemeinesFocusIn,=20
"Benutzername fuer FTP Zugang"]);
$Frame->Label(-text =3D> "FTP Kennwort",
-justify =3D> "left",
-anchor =3D> "w",
-background =3D> "white",
-width =3D> 15,
)->grid(-row =3D> 3, -column =3D> 0, -padx =3D> 2, -pady=20
=3D> 2);
my $eFTP_Passwort =3D $Frame->Entry(-textvariable =3D> \$FTP_Passwort,
-justify =3D> "left",
-background =3D> "yellow",
-width =3D> "15",
-validate =3D> 'key',
)->grid(-row =3D> 3,=20
-column =3D> 1, -padx =3D> 2, -pady =3D> 2);
$eFTP_Passwort->configure(-validatecommand =3D> [\&EingabePruefen,=20
$eFTP_Passwort]);
$eFTP_Passwort->bind('' =3D> [\&AllgemeinesFocusIn,=20
"Passwort fuer FTP Zugang"]);
$mw->minsize(240, 250);
$eFTP_Passwort->focus();
MainLoop();
sub AllgemeinesFocusIn {
my($w, $sText) =3D @_;
$sStatusText =3D $sText;
if (ref($w) eq "Tk::Entry") {
if (! $w->selectionPresent() ) {
# $w->selectionAdjust(0);
# $w->selectionTo('end');
$w->selectionRange(0, 'end') if ( $w->index('end') );
}
}
return 0;
} # sub AllgemeinesFocusIn {
--=20
Schönen Gruß aus dem Bergischen Land
Robert