Perl Tk Tab Reihenfolge
Hallo
In Perl Tk wird die Tab Reihenfolge durch die Pack Reihenfolge
bestimmt. Kann ich das eine ohne das andere ändern?
Wenn nicht, muß ich Tab im Programm selber verarbeiten. Gibt es da
irgendwas zu beachten?
Schönen Gruß aus dem Bergischen Land
Robert
Re: Perl Tk Tab Reihenfolge
Robert Berghaus <Robert.Berghaus [at] gmx.de> writes:
> Hallo
>
> In Perl Tk wird die Tab Reihenfolge durch die Pack Reihenfolge
> bestimmt. Kann ich das eine ohne das andere ändern?
Vielleicht kannst du focusNext und focusPrev überschreiben?
> Wenn nicht, muß ich Tab im Programm selber verarbeiten. Gibt es da
> irgendwas zu beachten?
Unter Umständen musst du mit bindtags arbeiten (siehe Tk::bindtags),
und vielleicht brauchst du auch ein Tk->break.
Gruß,
Slaven
--
Slaven Rezic - slaven <at> rezic <dot> de
Dump a Tk canvas as an xfig file:
http://search.cpan.org/search?mode=module&query=Tk::CanvasFi g
Re: Perl Tk Tab Reihenfolge
Hallo Slaven
Slaven Rezic schrieb:
> Robert Berghaus <Robert.Berghaus [at] gmx.de> writes:
>
>> Hallo
>>
>> In Perl Tk wird die Tab Reihenfolge durch die Pack Reihenfolge
>> bestimmt. Kann ich das eine ohne das andere ändern?
>
> Vielleicht kannst du focusNext und focusPrev überschreiben?
>
Muß ich mir erst mal ansehen. Noch versuche ich es ohne.
>> Wenn nicht, muß ich Tab im Programm selber verarbeiten. Gibt es da
>> irgendwas zu beachten?
>
> Unter Umständen musst du mit bindtags arbeiten (siehe Tk::bindtags),
> und vielleicht brauchst du auch ein Tk->break.
Bindtags benutze ich schon (zumindest arbeite ich schon mit
->bind), Tk->break hatte ich aber bisher noch nicht gesehen. Das
brauche ich aber, wenn ich <Tab> selber verwalten will.
Ich habe jetzt auf einer Notebook Seite 10 Eingabefelder und komme
mit Tab und Shift-Tab auf das jeweils richtige Feld. Vom ersten
und letzten will ich jeweils auf die Tabs des Notebooks kommen,
das funktioniert aber noch nicht (ich habe keine Ahnung, welches
Widget das sein soll). Wenn ich jetzt vom Nirwana mit Tab wieder
auf meine Eingabefelder kommen will, so wird das erste laut der
pack Ordnung angewählt und die Eingabe wird automatisch
selektiert. Vielleicht muß ich doch noch focusNext und focusPrev
überschreiben (sind das Methoden vom MainWindows?).
Eine Schwierigkeit besteht auch darin, Shift-Tab zu erkennen. Bind
liefert mir einmal Shift und einmal Tab, aber kein Shift-Tab. Wo
speichert Tk den Status dieser Tasten (Shift, Control, Alt)?
Vielen Dank und schönen Gruß aus dem Bergischen Land
Robert
Re: Perl Tk Tab Reihenfolge
"Robert Berghaus" <Robert.Berghaus [at] gmx.de> schrieb im Newsbeitrag
news:c1.2bm.35Lv3k$LSR [at] TPA31p-os2.robe-edv.lokal...
> Hallo
>
> In Perl Tk wird die Tab Reihenfolge durch die Pack Reihenfolge bestimmt.
> Kann ich das eine ohne das andere ändern?
Entweder benutzt du die Methoden $widget->raise oder $widget->lower, um die
Tab-Reihenfolge zu ändern. Optionales Argument ist dabei jeweils ein
Referenz-Widget, das zum Tab-Nachbar werden soll.
Oder du schreibst deine packs in der gewünschten Tab-Reihenfolge und benutzt
dabei die Optionen -before oder -after, um die Position des Widgets im
Container zu beeinflussen.
Gruß
Klaus
Re: Perl Tk Tab Reihenfolge
Robert Berghaus <Robert.Berghaus [at] gmx.de> writes:
[...]
> Eine Schwierigkeit besteht auch darin, Shift-Tab zu erkennen. Bind
> liefert mir einmal Shift und einmal Tab, aber kein Shift-Tab. Wo
> speichert Tk den Status dieser Tasten (Shift, Control, Alt)?
Versuch mal:
...
my $e = $w->XEvent;
warn $e->s;
--
Slaven Rezic - slaven <at> rezic <dot> de
Visualize Makefiles with GraphViz:
http://user.cs.tu-berlin.de/~eserte/src/perl/GraphViz-Makefi le/
Re: Perl Tk Tab Reihenfolge
Slaven Rezic schrieb:
> Robert Berghaus <Robert.Berghaus [at] gmx.de> writes:
>
> [...]
>> Eine Schwierigkeit besteht auch darin, Shift-Tab zu erkennen. Bind
>> liefert mir einmal Shift und einmal Tab, aber kein Shift-Tab. Wo
>> speichert Tk den Status dieser Tasten (Shift, Control, Alt)?
>
> Versuch mal:
>
> ...
> my $e =3D $w->XEvent;
> warn $e->s;
>
Ich benutze statt dessen Tk::event und bisher noch nichts
negatives festgestellt. Wenn ich dann noch bind mit MainWindow
nutze, so bekomme ich jeden Tastenanschlag mit.
Mich würde trotzdem interessieren, wo Tk das speichert, denn Tab
und Shift-Tab funktioniert ja immer.
--
Schönen Gruß aus dem Bergischen Land
Robert
Re: Perl Tk Tab Reihenfolge
Hallo Klaus
K. Wittrock schrieb:
>
> "Robert Berghaus" <Robert.Berghaus [at] gmx.de> schrieb im Newsbeitrag
> news:c1.2bm.35Lv3k$LSR [at] TPA31p-os2.robe-edv.lokal...
>> Hallo
>>
>> In Perl Tk wird die Tab Reihenfolge durch die Pack Reihenfolge
>> bestimmt. Kann ich das eine ohne das andere ändern?
>
> Entweder benutzt du die Methoden $widget->raise oder $widget->lower, um=
> die Tab-Reihenfolge zu ändern. Optionales Argument ist dabei jeweils =
ein
> Referenz-Widget, das zum Tab-Nachbar werden soll.
>
raise und lower funktioniert nicht für Tabs. Wenn ich die Doku
richtig verstehe, so wird hiermit festgelegt, wie die Widgets in
der 3. Dimension angelegt werden. Das funktioniert aber auch nicht
Frame übergreifend.
> Oder du schreibst deine packs in der gewünschten Tab-Reihenfolge und =
> benutzt dabei die Optionen -before oder -after, um die Position des
> Widgets im Container zu beeinflussen.
Auch das geht (zumindest noch) nicht. Ich benutze für jede Spalte
einen Frame und will vom 1. Widget aus Frame 1 zum 1. Widget aus
Frame 2 usw. Vielleicht werde ich das aber auch noch ändern.
Wenn der Tastaturfocus auf einem Tab vom Notebook ist und ich mit
focusCurrent das aktuelle Widget ausgeben lasse, so kommt immer
das Notebook. Wenn ich das jetzt in meiner Liste eintrage, so sagt
mir Perl, das noch focus und name fehlen. Das werde ich mir noch
genauer ansehen.
--
Schönen Gruß aus dem Bergischen Land
Robert
Re: Perl Tk Tab Reihenfolge
"Robert Berghaus" <Robert.Berghaus [at] gmx.de> schrieb im Newsbeitrag
news:c1.2bm.35NKdk$LSj [at] TPA31p-os2.robe-edv.lokal...
> Hallo Klaus
>
> K. Wittrock schrieb:
>>
>> "Robert Berghaus" <Robert.Berghaus [at] gmx.de> schrieb im Newsbeitrag
>> news:c1.2bm.35Lv3k$LSR [at] TPA31p-os2.robe-edv.lokal...
>>> Hallo
>>>
>>> In Perl Tk wird die Tab Reihenfolge durch die Pack Reihenfolge bestimmt.
>>> Kann ich das eine ohne das andere ändern?
>>
>> Entweder benutzt du die Methoden $widget->raise oder $widget->lower, um
>> die Tab-Reihenfolge zu ändern. Optionales Argument ist dabei jeweils ein
>> Referenz-Widget, das zum Tab-Nachbar werden soll.
>>
>
> raise und lower funktioniert nicht für Tabs.
Doch.
> Wenn ich die Doku richtig verstehe, so wird hiermit festgelegt, wie die
> Widgets in der 3. Dimension angelegt werden.
Auch.
> Das funktioniert aber auch nicht Frame übergreifend.
>
>> Oder du schreibst deine packs in der gewünschten Tab-Reihenfolge und
>> benutzt dabei die Optionen -before oder -after, um die Position des
>> Widgets im Container zu beeinflussen.
>
> Auch das geht (zumindest noch) nicht. Ich benutze für jede Spalte einen
> Frame und will vom 1. Widget aus Frame 1 zum 1. Widget aus Frame 2 usw.
> Vielleicht werde ich das aber auch noch ändern.
Meine beiden Rezepte funktionieren leider nur im selben Frame. Aber so
geht's:
my [at] fr;
$fr[$_] = $mw->Frame->pack(-side => 'left') foreach (0 .. 1);
foreach my $line (0 .. 2) {
$mw->Button(-text => $line)->pack(-in => $fr[0]);
$mw->Button(-text => $line)->pack(-in => $fr[1]);
}
Überlege mal, ob für deinen Zweck der Gridmanager geeigneter ist.
Gruß
Klaus
Re: Perl Tk Tab Reihenfolge
Robert Berghaus schrieb:
> Slaven Rezic schrieb:
>> Robert Berghaus <Robert.Berghaus [at] gmx.de> writes:
>>
>> [...]
>>> Eine Schwierigkeit besteht auch darin, Shift-Tab zu erkennen. Bind
>>> liefert mir einmal Shift und einmal Tab, aber kein Shift-Tab. Wo
>>> speichert Tk den Status dieser Tasten (Shift, Control, Alt)?
>>
>> Versuch mal:
>>
>> ...
>> my $e =3D $w->XEvent;
>> warn $e->s;
>>
>
> Ich benutze statt dessen Tk::event und bisher noch nichts negatives
> festgestellt. Wenn ich dann noch bind mit MainWindow nutze, so bekomme =
> ich jeden Tastenanschlag mit.
> Mich würde trotzdem interessieren, wo Tk das speichert, denn Tab und =
> Shift-Tab funktioniert ja immer.
>
Shift-Tab brauche ich gar nicht zu erkennen, das macht Tk schon
für mich (->bind(<<Left-Tab>> ...)). Das jetzt mit einer Funktion
verbunden und ein eigenes Feld mit Tab-Widgets und es
funktioniert. Das Notebook Tab lasse ich außen vor, dafür habe ich
Acceleratoren definiert. Jetzt muß ich mir nur noch merken,
welches Widget beim Umschalten aktiv ist und die Seite hat beim
Zurückschalten wieder denselben Stand. Mit der Tastatur geht es
schon, beim Umschalten mit der Maus fehlt mir noch der
Umschaltvorgang. Da werde ich aber auch noch eine Lösung finden.
--
Schönen Gruß aus dem Bergischen Land
Robert
Re: Perl Tk Tab Reihenfolge
K. Wittrock schrieb:
>
> "Robert Berghaus" <Robert.Berghaus [at] gmx.de> schrieb im Newsbeitrag
> news:c1.2bm.35NKdk$LSj [at] TPA31p-os2.robe-edv.lokal...
>> Hallo Klaus
>>
>> K. Wittrock schrieb:
>>>
>>> "Robert Berghaus" <Robert.Berghaus [at] gmx.de> schrieb im Newsbeitrag
>>> news:c1.2bm.35Lv3k$LSR [at] TPA31p-os2.robe-edv.lokal...
>>>> Hallo
>>>>
>>>> In Perl Tk wird die Tab Reihenfolge durch die Pack Reihenfolge
>>>> bestimmt.
>>>> Kann ich das eine ohne das andere ändern?
>>>
>>> Entweder benutzt du die Methoden $widget->raise oder $widget->lower, =
um
>>> die Tab-Reihenfolge zu ändern. Optionales Argument ist dabei jeweil=
s ein
>>> Referenz-Widget, das zum Tab-Nachbar werden soll.
>>>
>>
>> raise und lower funktioniert nicht für Tabs.
>
> Doch.
>
Bei mir funktioniert es nicht (oder ich mache es falsch). Mein
Testscript:
#!/usr/bin/perl -w
use strict;
use warnings;
use Tk;
my $mw =3D tkinit;
my $Button1 =3D $mw->Button(-text =3D> "Button1")->pack(-pady =3D> 2);
my $Button2 =3D $mw->Button(-text =3D> "Button2")->pack(-pady =3D> 2);
my $Button3 =3D $mw->Button(-text =3D> "Button3")->pack(-pady =3D> 2);
my $Button4 =3D $mw->Button(-text =3D> "Button4")->pack(-pady =3D> 2);
$Button3->raise($Button2);
MainLoop;
Wenn ich hier mit Tab durchgehe, so kommt 1, 2, 3, 4, ich erwarte
aber 1, 3, 2, 4.
>> Wenn ich die Doku richtig verstehe, so wird hiermit festgelegt, wie di=
e
>> Widgets in der 3. Dimension angelegt werden.
>
> Auch.
>
>> Das funktioniert aber auch nicht Frame übergreifend.
>>
>>> Oder du schreibst deine packs in der gewünschten Tab-Reihenfolge un=
d
>>> benutzt dabei die Optionen -before oder -after, um die Position des
>>> Widgets im Container zu beeinflussen.
>>
>> Auch das geht (zumindest noch) nicht. Ich benutze für jede Spalte ei=
nen
>> Frame und will vom 1. Widget aus Frame 1 zum 1. Widget aus Frame 2 usw=
=2E
>> Vielleicht werde ich das aber auch noch ändern.
>
> Meine beiden Rezepte funktionieren leider nur im selben Frame. Aber so
> geht's:
>
> my [at] fr;
> $fr[$_] =3D $mw->Frame->pack(-side =3D> 'left') foreach (0 .. 1);
> foreach my $line (0 .. 2) {
> $mw->Button(-text =3D> $line)->pack(-in =3D> $fr[0]);
> $mw->Button(-text =3D> $line)->pack(-in =3D> $fr[1]);
> }
>
Dafür wird als "-in" gebraucht. Funktioniert einwandfrei. Beim
Durchlesen hatte ich mir nur gedacht 'das brauchst du nie' und es
dann natürlich auch prompt vergessen. :-)
> =DCberlege mal, ob für deinen Zweck der Gridmanager geeigneter ist.
>
Im Buch "Mastering Perl/Tk" wird davor gewarnt, die Manager zu
mischen, deswegen hatte ich das gar nicht in Erwägung gezogen.
Wenn ich in einem Frame einen anderen Manager nehme, klappt es
einwandfrei.
Der Gridmanager ist für meinen Zweck auch geeigneter (es ist
schließlich eine Tabelle).
--
Vielen Dank und schönen Gruß aus dem Bergischen Land
Robert
Re: Perl Tk Tab Reihenfolge
Robert Berghaus schrieb:
> K. Wittrock schrieb:
>
>>
>> "Robert Berghaus" <Robert.Berghaus [at] gmx.de> schrieb im Newsbeitrag
>> news:c1.2bm.35NKdk$LSj [at] TPA31p-os2.robe-edv.lokal...
>>
>>> Hallo Klaus
>>>
>>> K. Wittrock schrieb:
>>>
>>>>
>>>> "Robert Berghaus" <Robert.Berghaus [at] gmx.de> schrieb im Newsbeitrag
>>>> news:c1.2bm.35Lv3k$LSR [at] TPA31p-os2.robe-edv.lokal...
>>>>
>>>>> Hallo
>>>>>
>>>>> In Perl Tk wird die Tab Reihenfolge durch die Pack Reihenfolge
>>>>> bestimmt.
>>>>> Kann ich das eine ohne das andere ändern?
>>>>
>>>>
>>>> Entweder benutzt du die Methoden $widget->raise oder $widget->lower, um
>>>> die Tab-Reihenfolge zu ändern. Optionales Argument ist dabei jeweils
>>>> ein
>>>> Referenz-Widget, das zum Tab-Nachbar werden soll.
>>>>
>>>
>>> raise und lower funktioniert nicht für Tabs.
>>
>>
>> Doch.
>>
>
> Bei mir funktioniert es nicht (oder ich mache es falsch). Mein Testscript:
> #!/usr/bin/perl -w
>
> use strict;
> use warnings;
> use Tk;
>
> my $mw = tkinit;
>
>
> my $Button1 = $mw->Button(-text => "Button1")->pack(-pady => 2);
> my $Button2 = $mw->Button(-text => "Button2")->pack(-pady => 2);
> my $Button3 = $mw->Button(-text => "Button3")->pack(-pady => 2);
> my $Button4 = $mw->Button(-text => "Button4")->pack(-pady => 2);
>
> $Button3->raise($Button2);
>
> MainLoop;
>
> Wenn ich hier mit Tab durchgehe, so kommt 1, 2, 3, 4, ich erwarte aber
> 1, 3, 2, 4.
Hallo,
hast du es einmal mit 'lower' probiert? $Button3 ist ja erst nach $Button2
gepackt woeden, liegt also schon 'über' diesem.
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
Re: Perl Tk Tab Reihenfolge
"Robert Berghaus" <Robert.Berghaus [at] gmx.de> schrieb im Newsbeitrag
news:c1.2bm.35PPmZ$LSp [at] TPA31p-os2.robe-edv.lokal...
> K. Wittrock schrieb:
>>
>> "Robert Berghaus" <Robert.Berghaus [at] gmx.de> schrieb im Newsbeitrag
>> news:c1.2bm.35NKdk$LSj [at] TPA31p-os2.robe-edv.lokal...
>> ........ Aber so
>> geht's:
>>
>> my [at] fr;
>> $fr[$_] = $mw->Frame->pack(-side => 'left') foreach (0 .. 1);
>> foreach my $line (0 .. 2) {
>> $mw->Button(-text => $line)->pack(-in => $fr[0]);
>> $mw->Button(-text => $line)->pack(-in => $fr[1]);
>> }
>>
>
> Dafür wird als "-in" gebraucht. Funktioniert einwandfrei. Beim Durchlesen
> hatte ich mir nur gedacht 'das brauchst du nie' und es dann natürlich auch
> prompt vergessen. :-)
Ging mir genauso. Als mein Beispiel lief, dachte ich "jetzt weiß ich
endlich, wozu -in gut ist".
>
>> Überlege mal, ob für deinen Zweck der Gridmanager geeigneter ist.
>>
>
> Im Buch "Mastering Perl/Tk" wird davor gewarnt, die Manager zu mischen,
> deswegen hatte ich das gar nicht in Erwägung gezogen. Wenn ich in einem
> Frame einen anderen Manager nehme, klappt es einwandfrei.
> Der Gridmanager ist für meinen Zweck auch geeigneter (es ist schließlich
> eine Tabelle).
Mein "Mastering Perl/Tk" ist inzwischen voller Notizen. Weiß jemand eine
gute Alternative?
Gruß
Klaus
Re: Perl Tk Tab Reihenfolge
Ch Lamprecht schrieb:
> Robert Berghaus schrieb:
>> K. Wittrock schrieb:
>>
[...]
>>
>> Bei mir funktioniert es nicht (oder ich mache es falsch). Mein
>> Testscript:
>> #!/usr/bin/perl -w
>>
>> use strict;
>> use warnings;
>> use Tk;
>>
>> my $mw =3D tkinit;
>>
>>
>> my $Button1 =3D $mw->Button(-text =3D> "Button1")->pack(-pady =3D> 2);=
>> my $Button2 =3D $mw->Button(-text =3D> "Button2")->pack(-pady =3D> 2);=
>> my $Button3 =3D $mw->Button(-text =3D> "Button3")->pack(-pady =3D> 2);=
>> my $Button4 =3D $mw->Button(-text =3D> "Button4")->pack(-pady =3D> 2);=
>>
>> $Button3->raise($Button2);
>>
>> MainLoop;
>>
>> Wenn ich hier mit Tab durchgehe, so kommt 1, 2, 3, 4, ich erwarte aber=
>> 1, 3, 2, 4.
>
>
> Hallo,
>
> hast du es einmal mit 'lower' probiert? $Button3 ist ja erst nach
> $Button2 gepackt woeden, liegt also schon 'über' diesem.
>
Mit lower gehts. Ich bin von der Tabulatorreihenfolge ausgegangen
und hier bekommt ja das erste gepackte Widget auch als erstes den
Fokus (bei Tab). Das werde ich mir jetzt mal ins Buch eintragen.
--
Schönen Gruß aus dem Bergischen Land
Robert