Schrift
[thread]5308[/thread]

Tk::Text -> focus aus Tk::JBrowseEntry setzen



<< >> 7 Einträge, 1 Seite
GoodFella
 2007-04-08 09:01
#46284 #46284
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
Ich benutze Tk::JBrowseEntry, um in ein Tk::Text-Widget reinzuschreiben:
Code (perl): (dl )
1
2
3
my $text_data = $combi_window->Text( -height => 8, width => 122 );
my $be_add =    $combi_window->JBrowseEntry( -state => 'readonly', -variable => \$headline, -choices => \@headlines, -width => 20);
$be_add->configure( -browsecmd => sub { $text_data->Insert( "$start_data$headline$end_data"); $text_data->focus; } );


Das funktioniert auch, nur leider hat das Text-Widget trotzdem nicht den Fokus.
Ich möchte nämlich Datenelemente einfügen und dann Leerzeichen / Zeilenümbrüche einfügen, OHNE nochmal aufs Text-Widget klicken zu müssen.

Achja hier mal ein Screenshot:
http://flux.pldsecurity.de/focus.jpg

Habe schon alle Tips des anderen aktuellen Tk::Text-Beitrages hier im Forum durch, ohne einen Effekt zu erzielen.
Jemand eine Idee?\n\n

<!--EDIT|GoodFella|1176009676-->
PerlProfi
 2007-04-08 10:55
#46285 #46285
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Du bist dir sicher, das du auch $be_add->break(); schon in dein -browsecmd nachdem $text_data->focus(); eingesetzt hast ?
GoodFella
 2007-04-08 13:27
#46286 #46286
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
[quote=PerlProfi,08.04.2007, 08:55]Du bist dir sicher, das du auch $be_add->break(); schon in dein -browsecmd nachdem $text_data->focus(); eingesetzt hast ?[/quote]
Jo, war gleich das erste, was ich versucht habe; kein Effekt.

JBrowseEntry ist ja ein ziemlich verschachteltes Widget, vielleicht liegt es daran.
Bei einem Button funktioniert das fokussieren nämlich (der fügt Newlines ein, ist mein Workaround)
Sucher
 2007-04-08 13:30
#46287 #46287
User since
2007-03-26
47 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use strict;
use warnings;

use Tk;
require Tk::JBrowseEntry;
my $mw = MainWindow->new;
my @headlines = qw/foo bar baz/;
my $headline;

my $text_data = $mw->Text( -height => 8,
-width => 122 )->pack;
my $be_add = $mw->JBrowseEntry( -state => 'readonly',
-variable => \$headline,
-choices => \@headlines,
-width => 20)->pack;
$be_add->configure( -browsecmd =>
sub { $text_data->insert('end',
"start $headline end_data\n");
$text_data->afterIdle([$text_data,'focus']);
} );
MainLoop;


Wenn du den Callback erst einmal zurückkehren lässt, funktioniert es. (OT:) Vielleicht willst du 'insert' benutzen: 'Insert' fügt am aktuellen Cursor ein.

Grüße
GoodFella
 2007-04-08 13:49
#46288 #46288
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
[quote=Sucher,08.04.2007, 11:30]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use strict;
use warnings;

use Tk;
require Tk::JBrowseEntry;
my $mw = MainWindow->new;
my @headlines = qw/foo bar baz/;
my $headline;

my $text_data = $mw->Text( -height => 8,
                          -width => 122 )->pack;
my $be_add    = $mw->JBrowseEntry( -state => 'readonly',
                                  -variable => \$headline,
                                  -choices => \@headlines,
                                  -width => 20)->pack;
$be_add->configure( -browsecmd =>
                   sub { $text_data->insert('end',
                                            "start $headline end_data\n");
                         $text_data->afterIdle([$text_data,'focus']);
                     } );
MainLoop;


Wenn du den Callback erst einmal zurückkehren lässt, funktioniert es. (OT:) Vielleicht willst du 'insert' benutzen: 'Insert' fügt am aktuellen Cursor ein.

Grüße[/quote]
Genau danach hab ich gesucht :DDDDD
Danke!

Und ich benutze bewusst Insert, das ganze kopiert eigentlich die Seriendruckfunktion von MS Word mit dem Unterschied, dass ich lediglich nach der längsten Kombination suche anstatt zu Drucken (Zweck: passt die Adresse auf den Brief oder braucht man eine kleinere Schriftart?)
Sucher
 2007-04-08 14:38
#46289 #46289
User since
2007-03-26
47 Artikel
BenutzerIn
[default_avatar]
Falls es dir um Laufweiten geht... die bekommt man vielleicht noch direkter so:

$item_width = $widget->fontMeasure('mein_font',$item)

Grüße,
GoodFella
 2007-04-08 21:10
#46290 #46290
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
Ist natürlich noch viel besser.. allerdings wirft das die Frage des praktischen Nutzens auf..
Wenn die Jungs, die Drucken, erst noch die Schriftart eingeben müssen, vielleicht benutzen sies dann gar nicht.
Es gibt bereits ein VBA-Makro, das allerdings alle Felder (auch die unbenutzen) zusammenkettet und daraus den längsten Datensatz berechnet. Dazu steht mein Programm in Konkurrenz - und meins hat noch den Nachteil, dass erst ein externes Programm gestartet werden muss.
Wär allerdings cool, wenn es Perl-Excel-Makros gäbe :D
..dann gäbe es den Nachteil nicht mehr ^^
<< >> 7 Einträge, 1 Seite



View all threads created 2007-04-08 09:01.