Schrift
[thread]5200[/thread]

Tk::Pane scrolled Frame

Leser: 2


<< |< 1 2 >| >> 15 Einträge, 2 Seiten
Perlfreak
 2006-06-02 15:27
#45565 #45565
User since
2006-05-19
3 Artikel
BenutzerIn
[default_avatar]
Hallo Freunde der Perl-community,

seit einigen Jahren programmiere ich nun schon Perl (sysadmin und CGI) und habe in diesem Forumsarchiv schon so manche gute Anregung und Hilfe gefunden. Jetzt habe ich zum ersten Mal eine Anwendung in Perl/Tk geschrieben und habe ein Problem das ich bisher, durch suchen im Netz, noch nicht lösen konnte.
Zunächst mal ich benutze Linux (SuSE 10.0), Perl 5.8.7 und Tk.pm 5.00404.

Ich habe mit Tk::Pane ein Scrolled Frame erzeugt, in das ich Zeilenweise Datensätze einlese. Jede Zeile hat 39 Label Felder. In das Frame passen 25 Zeilen. Wenn ich nun die 26 Zeile einlese wird diese zwar korrekt angezeigt nur leider ausserhalb (unterhalb) des Frames. Der User muss also einmal scrollen um den letzten Datensatz zu sehen.
Gibt es eine Möglichkeit automatisch zu scrollen sodas der letzte Datensatz unten im Frame zu sehen ist.

Und da ich gerade dabei bin noch ein Problem das ich trotz einiger guter Beiträge hier im Forum noch nicht lösen konnte.

Wenn ich mit einem Perlscript (shell) Umlaute in eine MySQL Tabelle eintrage stehen diese mit MySQL-Query lesbar korrekt in der Datenbank. Mit einem zweiten script kann ich diese auslesen und anzeigen.
Wenn ich nun ein Entry Feld mit Tk erstelle und Umlaute eintrage werden diese wieder lesbar in der Datenbank abgelegt aber beim Eingeben in dem Entry Feld erscheinen 2 Sonderzeichen. Dies ist zwar nicht schlimm aber unschön.
Gibt es einen Parameter für ein Entry Feld der die Eingabe richtig darstellt.

thx
renee
 2006-06-02 21:57
#45566 #45566
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Kannst Du für das zweite Problem vielleicht etwas Code posten und einen Screenshot zur Verfügung stellen? Ich kann mir das gerade nicht so gut vorstellen.

Für die Scrollbars könntest Du mal die Methode scroll ausprobieren (siehe CPAN:Tk::Scrollbar)...
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/
ptk
 2006-06-02 22:34
#45567 #45567
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Das zweite Problem ist wieder ein typisches Encoding-Problem. Das wurde in diesem Forum und auf de.comp.lang.perl.misc oft genug behandelt.
Gast Gast
 2006-06-06 13:15
#45568 #45568
Hallo Renee, Hallo ptk,
entschuldigt das ich mich erst jetzt wieder melde. Ich bin vor kurzem in ein Dorf im tiefsten Westen unserer Republik gezogen und hier habe ich noch keinen Telefon und damit auch keinen Internetzugang.

Zunächst zu ptk.
Nicht alle User sind zu faul oder zu doof um im Forum nach Lösungen zu suchen. Seit Jahren habe ich 80% der Lösungen aus den diversen Foren und 19% der Lösungen aus Büchern. 99% der Probleme sind schon mal in den Foren besprochen worden.
Ich hätte keine Anfrage gestellt wenn es einen gleichartigen Beitrag gegeben hätte.

So nun zu Renee,
Beim shellscript klappt alles (schreiben und lesen und Überschriften)
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl -w
use DBI;
my $dbh = DBI->connect("DBI:mysql:TEST;host=localhost","joe","");
my $EIN = <stdin>;
my $sth = $dbh->prepare("insert into Test (Name) values ($EIN);
$sth->execute;

nach der Eingabe von Umlauten kann ich mit MySQL-Query diese in der Tabelle korrekt lesen.
das gleiche auch beim Auslesen und anzeigen in der shell.

#!/usr/bin/perl -w
use DBI;
my $dbh = DBI->connect("DBI:mysql:TEST;host=localhost","joe","");
my $sth1 = $dbh->prepare("select * from Test");
$sth1->execute;
my $ref1 = $sth1->fetchrow_hashref())

print "Überschrift -- $ref1->{\"Name\"}\n";


Auch hier sind die Umlaute korrekt lesbar.


Nun zu Perl Tk.
Script Eingabe:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/perl -w
use Tk;
use DBI;
my $dbh = DBI->connect("DBI:mysql:TEST;host=localhost","joe","");
my $Main=MainWindow->new();
$Main->minsize( qw(250 250));
$Main->maxsize( qw(250 250));
$Main->title("Eintest");
$Main->configure(-background=> 'blue' );
my $top=$Main->Frame(-background=> 'blue',)->pack(-side=>'top',-fill=>'both' );
$CELL = $top->Entry(-width=>10, -background=>'white', -textvariable =>\$EIN)->pack(-side=>'left' );
$CELL->bind("<Return>",&Schreiben);

sub Schreiben
{
my $sth2 = $dbh->prepare("insert into Test
(Name)
values($EIN);
$sth->execute;
}

Mit MySQL-Query sind die Umlaute in der Datenbank korrekt lesbar.
Während des eingebens erscheinen in dem Entryfeld aber nur 2 Sonderzeichen.


Script Ausgabe:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl -w
use Tk;
use DBI;
my $dbh = DBI->connect("DBI:mysql:TEST;host=localhost","joe","");
my $Main=MainWindow->new();
$Main->minsize( qw(250 250));
$Main->maxsize( qw(250 250));
$Main->title("Austest");
$Main->configure(-background=> 'blue' );
my $top=$Main->Frame(-background=> 'blue',)->pack(-side=>'top',-fill=>'both' );
$CELLE = $top->Label(-width =>10, -background =>'white', -text =>'Überschrift')->pack(-side=>'left' );
$CELLE1 = $top->Label(-width =>10,-background =>'white', -textvariable => \$AUS)->pack(-side=>'left' );
$sth3 = $dbh->prepare("select * from Test);
$sth3->execute;
my $ref3 = $sth3->fetchrow_hashref();
$AUS = $ref3->{"Name"};

Beim auslesen und anzeigen in Perl/Tk habe ich dann folgendes Problem.

Beim Überschrift Label werden anstatt "Ü" wieder 2 Sonderzeichen angezeigt.
Beim Label aus der Datenbank aber korekte Umlaute angezeigt.
Die Labeldefinition ist gleich.

Wieso ist bei gleicher Definition der Labelfelder das Anzeigeergebniss so unterschiedlich.

MfG
Perlfreak\n\n

<!--EDIT|renee|1149586910-->
Perlfreak
 2006-06-06 13:19
#45569 #45569
User since
2006-05-19
3 Artikel
BenutzerIn
[default_avatar]
Sorry hatte vergessen mich einzuloggen.
renee
 2006-06-06 13:46
#45570 #45570
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Welche Perl-Version benutzt Du?
Welches Betriebssystem?
Welches Tk?


Füg mal ein
Code: (dl )
use utf8;
am Anfang Deines Skripts ein...
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/
ptk
 2006-06-06 14:40
#45571 #45571
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Nein, "use utf8" hilft hier nicht. "use utf8" hilft sehr selten.

Stattdessen sollte man "use Encode" verwenden und beim Schreiben in die DB encode("utf-8", $data); und beim Einlesen aus der DB decode verwenden.
ptk
 2006-06-06 15:03
#45572 #45572
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
zipster
 2006-06-06 15:21
#45573 #45573
User since
2004-09-06
458 Artikel
BenutzerIn
[default_avatar]
Also bei mir hat damals UTF8 garnicht geholfen. Ich habs so gelößt.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    foreach my $datensatz_id (sort keys(%{$hash_ref})) {
if (defined($id_kontrolle->{$datensatz_id})){
foreach $zeilen_bezeichnung (keys(%{$hash_ref->{$datensatz_id}})) {
$sql .= "," if $sql;
$sql .= "$zeilen_bezeichnung"." = ?";
$values = Encode::encode ("ISO-8859-1", $hash_ref->{$datensatz_id}->{$zeilen_bezeichnung});
push (@array, "$values");
}
push (@array, $datensatz_id);
$sql = "UPDATE $tabellen_name SET $sql WHERE id = ?";
$dbh->do ($sql, undef, @array);
undef $sql;
undef @array;
}
zipster
 2006-06-06 15:23
#45574 #45574
User since
2004-09-06
458 Artikel
BenutzerIn
[default_avatar]
[quote=renee,06.06.2006, 11:46]Welche Perl-Version benutzt Du?
Welches Betriebssystem?
Welches Tk?[/quote]
Ist mir eben aufgefallen ;)

[quote=Perlfreak,02.06.2006, 13:27]
Zunächst mal ich benutze Linux (SuSE 10.0), Perl 5.8.7 und Tk.pm 5.00404
[/quote]\n\n

<!--EDIT|zipster|1149593089-->
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2006-06-02 15:27.