Perl Tk, Windows, Entry, Backspace

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.

--
Schönen Gruß aus dem Bergischen Land
Robert
Robert Berghaus [ Mo, 02 Juli 2007 13:43 ] [ ID #1757826 ]

Re: Perl Tk, Windows, Entry, Backspace

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 [at] 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( [at] i)});MainL oop
Ch Lamprecht [ Mo, 02 Juli 2007 17:14 ] [ ID #1757832 ]

Re: Perl Tk, Windows, Entry, Backspace

Hallo Christoph

Ch Lamprecht schrieb:
> 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 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,
>
> 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
zunächst mal darum zu erfahren, ob dieses Verhalten bekannt ist.
Dem scheint wohl nicht so zu sein.

--
Schönen Gruß aus dem Bergischen Land
Robert
Robert Berghaus [ Mo, 02 Juli 2007 19:53 ] [ ID #1757835 ]

Re: Perl Tk, Windows, Entry, Backspace

Hallo Christoph

Ch Lamprecht schrieb:
> 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 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,
>
> hast du ein Beispiel, an dem man das reproduzieren kann?

Nicht nur das, sondern auch den Fehler eingekreist (war _auch_
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
Aufruf schon der Inhalt des Eingabefeldes mit dem Fokus selektiert
ist. Die Funktionalität habe ich dann für ein anderes
Eingabefenster übernommen.
Mein erster Ansatz war, selectionRange zu nehmen (ohne die
if-Abfrage dahinter). Das führt bei einem leeren Text aber zu
einem Tk-Fehler. Mit selectionAdjust und selectionTo schien es
dann zu funktionieren (auch wenn ich die Beschreibung der
Funktionen nicht richtig verstanden habe). Wahrscheinlich habe ich
bisher nie versucht, einen neuen Text einzugeben und mit Backspace
zu löschen. Sobald der Cursor einmal bewegt wird, funktioniert es
nämlich.
Das dürfte wieder einer der Fehler sein, die nur 'Neulinge'
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
=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,
-column =3D> 1, -padx =3D> 2, -pady =3D> 2);
$eFTP_Name->bind('<FocusIn>' =3D> [\&AllgemeinesFocusIn,
"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
=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,
-column =3D> 1, -padx =3D> 2, -pady =3D> 2);
$eFTP_Passwort->configure(-validatecommand =3D> [\&EingabePruefen,
$eFTP_Passwort]);
$eFTP_Passwort->bind('<FocusIn>' =3D> [\&AllgemeinesFocusIn,
"Passwort fuer FTP Zugang"]);

$mw->minsize(240, 250);
$eFTP_Passwort->focus();

MainLoop();

sub AllgemeinesFocusIn {
my($w, $sText) =3D [at] _;
$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 {

--
Schönen Gruß aus dem Bergischen Land
Robert
Robert Berghaus [ Di, 03 Juli 2007 15:24 ] [ ID #1758959 ]
Perl » de.comp.lang.perl.misc » Perl Tk, Windows, Entry, Backspace

Vorheriges Thema: Perl Tk, nur ein Fenster
Nächstes Thema: Leerzeichen am Anfang löschen