Schrift
[thread]5324[/thread]

Übersetzungs-GUI 2 - Mein Programm: bin am Verzweifeln

Tags: Ähnliche Threads

Leser: 3


<< |< 1 2 3 >| >> 23 Einträge, 3 Seiten
life_heart
 2007-06-03 14:46
#46387 #46387
User since
2007-05-30
12 Artikel
BenutzerIn
[default_avatar]
Hallo, alle zusammen!

Hier ist mal mein Programm:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/usr/bin/perl

use strict;
use warnings;
use Tk;

my $input = 'noname.pl';

# Hauptfenster
my $nw = MainWindow->new();

# Titel des Hauptfensters
$nw->title ('Man Machine Interfaces II - UE - BSP 2');

# Menü
my $mbar = $nw->Menu();
$nw->configure (-menu => $mbar);
my $file = $mbar->cascade (-label => "File", -underline => 0);
$file->command (-label => "New", -command => [\&neu, "new"], -accelerator => 'Crtl-N', -underline => 0);
$file->command (-label => "Open", -command => [\&open, "open"], -accelerator => 'Crtl-O', -underline => 0);
$file->command (-label => "Save", -command => [\&save, "save"], -accelerator => 'Crtl-S', -underline => 0);
$file->separator();
$file->command (-label => "Exit", -command => [$nw => 'destroy'], -accelerator => 'Crtl-B', -underline => 0);
my $do = $mbar->cascade (-label => "Do", -underline => 0);
$do->command (-label => "Translation" -command => sub {translate}, -accelerator => 'Crtl-T', underline => 0);

# Text-Widget
my $In = $nw->Text (-wrap => 'none')->pack;
my $Out = $nw->Text (-wrap => 'none')->pack;

# Dictionary-Listbox
my $Dict = $nw->Listbox()->pack (-side => 'top', -expand => 1, -fill => 'both');
$Dict->insert("end", "the - das");
$Dict->insert("end", "sea - meer");
$Dict->insert("end", "is - ist");
$Dict->insert("end", "blue - blau");

MainLoop();

sub file {
} # sub file


sub neu {
my $tw = $nw->Toplevel(-title => 'New');
$tw->Label(-text => "Name of the File: ")->pack();
my $in = $tw->Entry(-textvariable => \$input)->pack();
$in->bind('<Return>', [\&create, $tw]);
} # sub neu


# Erzeugen einer neuen Datei
sub create {
CORE::open (IFILE, ">> $input") or die "can't create '$input':$!\n";
close IFILE;
$_[1]->destroy(); #Fenster wieder löschen
} # sub create


sub open {
my $tw = $nw->Toplevel(-title => 'Open');
$tw->Label(-text => "Open which File: ")->pack();
my $in = $tw->Entry(-textvariable => \$input)->pack();
$in->bind('<Return>', [ \&read, $tw ]);
} # sub open


# Datei zum Lesen und Schreiben Öffnen
sub read {
CORE::open (IFILE, "< $input") or die "can't open '$input':$!\n";
while (<IFILE>) {
$In->insert("end", $_);
}
close IFILE;
$_[1]->destroy(); #Fenster wieder löschen
} # sub read


sub save {
my $tw = $nw->Toplevel(-title => 'Save');
$tw->Label(-text => "Save : $input")->pack();
my $in=$tw->Entry(-textvariable => \$input)->pack();
print $input , "\n";
$in->bind('<Return>', [\&write, $tw]);
} # sub save


#Speichern der Eingabe
sub write {
CORE::open (IFILE, "+< $input") or die "can't open '$input':$!\n";
print IFILE $In->get('1.0', 'end');;
close IFILE or die $!;
$_[1]->destroy(); #Fenster löschen
} # sub write


sub perl {
system("/usr/bin/perl $input");
} # sub perl

sub translate {
}


Bei diesem gibt der Interpreter folgende Fehlermeldung aus:

Code: (dl )
Bareword "translate" not allowed while "strict subs" in use at C:\bsp2_final.pl line 29.


was noch nicht okay ist, wie ich das text-widget-fenster $out neben $in setzen kann und dass die listbox $dict unter den beiden anderen fenstern ist. und wie ich sub translate schreiben soll, damit die übersetzung funktioniert bzw. der text im $in selektiert werden kann, damit man automatisch im wörterbuch nachsieht und den text dann in $out verschiebt. ich bin schon sehr am verzweifeln und kann einfach nicht mehr weiter. bis morgen soll es abgegeben werden. bitte helft mir. :(

danke!
styx-cc
 2007-06-03 15:09
#46388 #46388
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Dein Tk koenntest du wie folgt schreiben:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/perl

use strict;
use warnings;
use Tk;

my $input = 'noname.pl';

# Hauptfenster
my $nw = MainWindow->new();

# Titel des Hauptfensters
$nw->title ('Man Machine Interfaces II - UE - BSP 2');

# Menü
my $mbar = $nw->Menu();
$nw->configure (-menu => $mbar);
my $file = $mbar->cascade (-label => "File", -underline => 0);
$file->command (-label => "New", -command => [\&neu, "new"], -accelerator => 'Crtl-N', -underline => 0);
$file->command (-label => "Open", -command => [\&open, "open"], -accelerator => 'Crtl-O', -underline => 0);
$file->command (-label => "Save", -command => [\&save, "save"], -accelerator => 'Crtl-S', -underline => 0);
$file->separator();
$file->command (-label => "Exit", -command => [$nw => 'destroy'], -accelerator => 'Crtl-B', -underline => 0);
my $do = $mbar->cascade (-label => "Do", -underline => 0);
$do->command(-label => "translation", -command => sub {&translate()}, -accelerator => 'Crtl-T', -underline => 0);

# Text-Widget
my $In = $nw->Text (-wrap => 'none')->grid(-column => 0, -row => 0);
my $Out = $nw->Text (-wrap => 'none')->grid(-column => 1, -row => 0);

# Dictionary-Listbox
my $Dict = $nw->Listbox()->grid(-column => 0, -row => 1, -columnspan => 2);
$Dict->insert("end", "the - das");
$Dict->insert("end", "sea - meer");
$Dict->insert("end", "is - ist");
$Dict->insert("end", "blue - blau");

MainLoop();


MfG
Pörl.
renee
 2007-06-03 15:17
#46389 #46389
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das hier fügt den markierten Text an das Ende von $Out an:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/usr/bin/perl

use strict;
use warnings;
use Tk;

my $input = 'noname.pl';

# Hauptfenster
my $nw = MainWindow->new();

# Titel des Hauptfensters
$nw->title ('Man Machine Interfaces II - UE - BSP 2');

# Text-Widget
my $In = $nw->Text (-wrap => 'none')->pack;
my $Out = $nw->Text (-wrap => 'none')->pack;

# Menü
my $mbar = $nw->Menu();
$nw->configure (-menu => $mbar);
my $file = $mbar->cascade (-label => "File", -underline => 0);
$file->command (-label => "New", -command => [\&neu, "new"], -accelerator => 'Crtl-N', -underline => 0);
$file->command (-label => "Open", -command => [\&open, "open"], -accelerator => 'Crtl-O', -underline => 0);
$file->command (-label => "Save", -command => [\&save, "save"], -accelerator => 'Crtl-S', -underline => 0);
$file->separator();
$file->command (-label => "Exit", -command => [$nw => 'destroy'], -accelerator => 'Crtl-B', -underline => 0);
my $do = $mbar->cascade (-label => "Do", -underline => 0);
$do->command (-label => "Translation", -command => sub {translate()}, -accelerator => 'Crtl-T', -underline => 0);

# Dictionary-Listbox
my $Dict = $nw->Listbox()->pack (-side => 'top', -expand => 1, -fill => 'both');
$Dict->insert("end", "the - das");
$Dict->insert("end", "sea - meer");
$Dict->insert("end", "is - ist");
$Dict->insert("end", "blue - blau");

MainLoop();

sub file {
} # sub file


sub neu {
   my $tw = $nw->Toplevel(-title => 'New');
   $tw->Label(-text => "Name of the File: ")->pack();
   my $in = $tw->Entry(-textvariable => \$input)->pack();
   $in->bind('<Return>', [\&create, $tw]);
} # sub neu


# Erzeugen einer neuen Datei
sub create {
   CORE::open (IFILE, ">> $input") or die "can't create '$input':$!\n";
   close IFILE;
   $_[1]->destroy();  #Fenster wieder löschen
} # sub create


sub open {
   my $tw = $nw->Toplevel(-title => 'Open');
   $tw->Label(-text => "Open which File: ")->pack();
   my $in = $tw->Entry(-textvariable => \$input)->pack();
   $in->bind('<Return>', [ \&read, $tw ]);
} # sub open


# Datei zum Lesen und Schreiben Öffnen
sub read {
   CORE::open (IFILE, "< $input") or die "can't open '$input':$!\n";
   while (<IFILE>) {
       $In->insert("end", $_);
   }
   close IFILE;
   $_[1]->destroy();  #Fenster wieder löschen
} # sub read


sub save {
   my $tw = $nw->Toplevel(-title => 'Save');
   $tw->Label(-text => "Save : $input")->pack();
   my $in=$tw->Entry(-textvariable => \$input)->pack();
   print $input , "\n";
   $in->bind('<Return>', [\&write, $tw]);
} # sub save


#Speichern der Eingabe
sub write {
   CORE::open (IFILE, "+< $input") or die "can't open '$input':$!\n";
   print IFILE $In->get('1.0', 'end');;
   close IFILE or die $!;
   $_[1]->destroy(); #Fenster löschen
} # sub write


sub perl {
   system("/usr/bin/perl $input");
} # sub perl

sub translate {
    my $text = $In->getSelected();
    $Out->insert('end',$text);
}
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/
life_heart
 2007-06-03 16:56
#46390 #46390
User since
2007-05-30
12 Artikel
BenutzerIn
[default_avatar]
nun sieht das programm mit eurer hilfe so aus:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/usr/bin/perl

use strict;
use warnings;
use Tk;

my $input = 'noname.pl';

# Hauptfenster
my $nw = MainWindow->new();

# Titel des Hauptfensters
$nw->title ('Man Machine Interfaces II - UE - BSP 2');

# Text-Widget
my $In = $nw->Text (-wrap => 'none')->grid(-column => 0, -row => 0);
my $Out = $nw->Text (-wrap => 'none')->grid(-column => 1, -row => 0);

# Menü
my $mbar = $nw->Menu();
$nw->configure (-menu => $mbar);
my $file = $mbar->cascade (-label => "File", -underline => 0, -tearoff => 0);
$file->command (-label => "New", -command => [\&neu, "new"], -accelerator => 'Crtl-N', -underline => 0);
$file->command (-label => "Open", -command => [\&open, "open"], -accelerator => 'Crtl-O', -underline => 0);
$file->command (-label => "Save", -command => [\&save, "save"], -accelerator => 'Crtl-S', -underline => 0);
$file->separator();
$file->command (-label => "Exit", -command => [$nw => 'destroy'], -accelerator => 'Crtl-B', -underline => 0);
my $do = $mbar->cascade (-label => "Do", -underline => 0, -tearoff => 0);
$do->command (-label => "Translation", -command => sub {translate()}, -accelerator => 'Crtl-T', -underline => 0);

# Dictionary-Listbox
my $Dict = $nw->Listbox()->grid(-column => 0, -row => 1, -columnspan => 2);
$Dict->insert("end", "the - das");
$Dict->insert("end", "sea - meer");
$Dict->insert("end", "is - ist");
$Dict->insert("end", "blue - blau");

MainLoop();

sub file {
} # sub file


sub neu {
  my $tw = $nw->Toplevel(-title => 'New');
  $tw->Label(-text => "Name of the File: ")->pack();
  my $in = $tw->Entry(-textvariable => \$input)->pack();
  $in->bind('<Return>', [\&create, $tw]);
} # sub neu


# Erzeugen einer neuen Datei
sub create {
  CORE::open (IFILE, ">> $input") or die "can't create '$input':$!\n";
  close IFILE;
  $_[1]->destroy();  #Fenster wieder löschen
} # sub create


sub open {
  my $tw = $nw->Toplevel(-title => 'Open');
  $tw->Label(-text => "Open which File: ")->pack();
  my $in = $tw->Entry(-textvariable => \$input)->pack();
  $in->bind('<Return>', [ \&read, $tw ]);
} # sub open


# Datei zum Lesen und Schreiben Öffnen
sub read {
  CORE::open (IFILE, "< $input") or die "can't open '$input':$!\n";
  while (<IFILE>) {
      $In->insert("end", $_);
  }
  close IFILE;
  $_[1]->destroy();  #Fenster wieder löschen
} # sub read


sub save {
  my $tw = $nw->Toplevel(-title => 'Save');
  $tw->Label(-text => "Save : $input")->pack();
  my $in=$tw->Entry(-textvariable => \$input)->pack();
  print $input , "\n";
  $in->bind('<Return>', [\&write, $tw]);
} # sub save


#Speichern der Eingabe
sub write {
  CORE::open (IFILE, "+< $input") or die "can't open '$input':$!\n";
  print IFILE $In->get('1.0', 'end');;
  close IFILE or die $!;
  $_[1]->destroy(); #Fenster löschen
} # sub write


sub perl {
  system("/usr/bin/perl $input");
} # sub perl

sub translate {
   my $text = $In->getSelected();
   $Out->insert('end',$text);
}


es ist jetzt nur das problem, wenn ich auf den zweiten menübutton do und dann auf translation klicke, dann übersetzt er mir den text leider nicht im rechten fenster in englisch. gibt es eine möglichkeit, wie man das schreiben könnte bzw. wie es mit der funktion WWW::Leo möglich ist, anstatt diesem einfachen wörterbuch

Code: (dl )
1
2
3
4
5
6
# Dictionary-Listbox
my $Dict = $nw->Listbox()->grid(-column => 0, -row => 1, -columnspan => 2);
$Dict->insert("end", "the - das");
$Dict->insert("end", "sea - meer");
$Dict->insert("end", "is - ist");
$Dict->insert("end", "blue - blau");


das wörterbuch WWW::Leo zu verwenden?

danke! ;)\n\n

<!--EDIT|life_heart|1180875657-->
pktm
 2007-06-03 17:12
#46391 #46391
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Bei mir macht er das. Hast du eventuell vergessen den Text zu markieren?
http://www.intergastro-service.de (mein erstes CMS :) )
life_heart
 2007-06-03 17:21
#46392 #46392
User since
2007-05-30
12 Artikel
BenutzerIn
[default_avatar]
ich habe den text markiert, aber er wirft mir in das rechte fenster dann nur den deutschen text aus und nicht den englischen. sprich: wenn ich links reinschreibe "das meer ist blau", den text markiere und dann auf translation klicke, dann schreibt er mit anstatt "the sea is blue" "das meer ist blau" hinein.

daher meine ich ja, dass jetzt nur das problem auftritt, wenn ich auf den zweiten menübutton do und dann auf translation klicke, dann übersetzt er mir den text leider nicht im rechten fenster in englisch, obwohl der text markiert ist. und daher meine frage: gibt es eine möglichkeit, wie man das schreiben könnte bzw. ob es mit der funktion WWW::Leo möglich ist, anstatt dieses einfache wörterbuch

Code: (dl )
1
2
3
4
5
6
# Dictionary-Listbox
my $Dict = $nw->Listbox()->grid(-column => 0, -row => 1, -columnspan => 2);
$Dict->insert("end", "the - das");
$Dict->insert("end", "sea - meer");
$Dict->insert("end", "is - ist");
$Dict->insert("end", "blue - blau");


das wörterbuch WWW::Leo zu verwenden?

bitte und danke für eure hilfe! ;)\n\n

<!--EDIT|life_heart|1180877111-->
pktm
 2007-06-03 17:34
#46393 #46393
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ach so. Na das liegt daran, dass du auch nur den deutschen Text ins rechte Fenster eingibst:
Code: (dl )
1
2
3
4
sub translate {
   my $text = $In->getSelected();
   $Out->insert('end',$text);
}


Mehr machst du noch nicht.

Ich habe gerade mal das Modul WWW::Leo angesehen.
Es gibt hier eine aktuelle, funktionierende Version: http://www.tiros.net/leo/

Hier mein Testkode:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/Perl/bin/perl

use strict;
use warnings;
use Data::Dumper qw/Dumper/;
use WWW::Leo;

my $leo = WWW::LEO->new();

$leo->query("das meer ist blau");

if ($leo->num_results) {

  print Dumper $leo->en_de();

}else{
   print "Sorry, your query for '%s'gave no results.\n", $leo->query;
}


Aber da wirst du noch eine Menge Arbeit vor dir haben ;-)

Edit: Hier noch etwas, das ich geändert habe:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# ...
$do->command (-label => "Translation", -command => sub {translate($In, $Out)}, -accelerator => 'Crtl-T', -underline => 0);
# ...


=head3 translate($in, $out)

Liest den Textaus dem Eingabe-Widget $in aus und fügt in in das Ausgabe-Widget ein ($out).
Ein- und Ausgabewidget müssen vom Typ Tk::Text sein.

=cut

sub translate {
    my $in    = shift;
    my $out   = shift;

    my $text = $in->getSelected();

    # Übersetzung

    $out->insert('end',$text);
}


Grüße, pktm\n\n

<!--EDIT|pktm|1180878029-->
http://www.intergastro-service.de (mein erstes CMS :) )
life_heart
 2007-06-03 17:41
#46394 #46394
User since
2007-05-30
12 Artikel
BenutzerIn
[default_avatar]
na, okay! bevor ich mir mehr arbeit antue, ist es mir lieber, wenn das mit dem einfachen wörterbuch mal funktioniert.

was müsste ich da

Code: (dl )
1
2
3
4
sub translate {
  my $text = $In->getSelected();
  $Out->insert('end',$text);
}


noch reinschreiben, damit er mir den linken deutschen text in das rechte fenster in englisch reinschreibt? und wie kann man das wörterbuch-fenster so groß machen, dass es gleich lang und breit ist, wie die beiden oberen fenster zusammen?

danke! ;)\n\n

<!--EDIT|life_heart|1180878196-->
renee
 2007-06-03 17:45
#46395 #46395
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ein wenig Arbeit wird von Dir auch verlangt. Ich habe Dir gezeigt, wie Du an das markierte Wort kommst. In der translate-Subroutine musst Du einfach ein Objekt von WWW::Leo erzeugen und dann der Methode "query" das markierte Wort übergeben. Dann musst Du in $Out einfach das Ergebnis von "query" ausgeben und nicht das markierte Wort.
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/
pktm
 2007-06-03 17:51
#46396 #46396
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Mit -sticky kann man bei grid die Ausdehnung angeben. In deinem Fall müsste sich das Widget vom Westen nach Osten ausdehnen, also ->grid(..., -sticky => 'we');

Nur die "Arbeit", die Übersetzung einzubauen, also die deutschen Wörter auf der linken Seite in englische auf der rechten Seite zu übersetzen, musst du dir jetzt schon noch selbst machen. :-p
Wenn du das eingebaut hast kannst du ja mal versuchen "Fliegen ist schön" zu übersetzen.

Edit: Da war renee schneller. Bitte vermeide soclhe Sachen wie "was müsste ich da noch reinschreiben, damit er...", immerhin sind wir nicht deine Arbeitssklaven ;)
Bestimmt möchtest du ja auch was dabei lernen oder?

Grüße, pktm\n\n

<!--EDIT|pktm|1180878815-->
http://www.intergastro-service.de (mein erstes CMS :) )
<< |< 1 2 3 >| >> 23 Einträge, 3 Seiten



View all threads created 2007-06-03 14:46.