Perl-Skripte mit grafischer Operfläche mit WxPerl

Joachim on 7.3.2016

StrawberryPerl und ActivPerl sind die bekanntesten Perl-Distributionen unter Windows. Die meisten eingefleischten Perl-Nutzer schwören auf StrawberyPerl. Ich nutze schon seit 2003 ActivPerl und hatte bis jetzt noch keinen Grund zu wechseln.

Allgemeines

Als Grundlage nutzte ich die Tutorials von Herbert Breunung ( http://lichtkind.de/) aus dem Perl-Magazin $foo. Dieses Magazin wird leider nicht mehr vertrieben.

StrawberryPerl und ActivPerl sind die bekanntesten Perl-Distributionen unter Windows. Die meisten eingefleischten Perl-Nutzer schwören auf StrawberyPerl. Ich nutze schon seit 2003 ActivPerl und hatte bis jetzt noch keinen Grund zu wechseln.

ActivPerl ist ein kostenloser Perl-Interpreter für Windows.
Perl - Practical Extraction and Report Language - ist eine freie und leistungsfähige Programmier-Sprache, die sich seit ihrem Debüt im Jahr 1987 rasant verbreitet hat. Sie hat sich als höhere Programmier-Sprache zur Plattform-übergreifenden Entwicklung portabler Tools und als zuverlässiges Werkzeug für verschiedenste Aufgaben bewährt. Besonders nützlich ist Perl für System-Administration und Web-Programmierung. ActiveState bietet mit ActivePerl einen kostenlosen Interpreter für Perl-Skripte an. Zusätzlich ist ein "Perl Package Manager" mitgeliefert, mit dem Sie Ihre Perl-Pakete verwalten, löschen oder neue installieren können.

Link:
http://www.activestate.com/activeperl/downloads

Installation Wx mit der ppm-Shell

rep add wxperl \ http://www.wxperl.co.uk/repository
install Alien-wxWidgets
install Wx

Dokumentationen für WxPerl

Offizielle WxWidget-Seite:
http://wxwidgets.org/docs/

Alle Abweichungen zwischen WxPerl und WxWidgets sind in den Methodenbeschreibungen eingetragen. Diese und sämtliche weitere Dokumentationen sind unter http://wxperl.sf.net/documentation.html aufgelistet.

Informationen in deutsch findet Ihr unter: http://wiki.perl-community.de/cgi-bin/foswiki/view/Wissensbasis/WxPerlTutorial.
WIKI ist leider nicht mehr erreichbar! (Stand: 07.03.2016)

Ein paar Wx-Regeln:

  1. Fast alles ist ein Objekt. Mit wenigen Ausnahmen wie Benachrichtigungsboxen oder der Zwischenablage wird jedes Widget mit Wx::Ding->new('para', 'meter'); erstellt und eine Wx-Applikation ist immer auch eine Hierachis von Objekten.
  2. Methoden haben positionale Parameter. Grundlegendes Schema ist: Elternwidget, ID, Input, Position, Stil, etc. Die Reihenfolge entspricht der Wichtigkeit und nicht benötigte Parameter können weggelassen werden. Die ersten 1 bis 3 (variiert) Parameter müssen immer angegeben werden und nach dem, wichtigen Parameter kann aufgehört werden. Wenn ein Parameter zwischendurch uninteressant ist, kann er mit "-1" auf default gesetzt werden.
  3. Eigenschaften eines Widgets werden mit Konstanten gesetzt. Sie entsprechen alle einem Zahlenwert der auch eingefügt werden könnte. Aber es ist sauberer, alle benötigten Konstanten mit dem use Wx qw(...); anzumelden.

Beispielskript ServusWelt.pl

use strict;
use warnings;
# Das Paket ServusWelt wird durch den Befehl use base ...; zum Hauptprogramm, 
# da es dadurch von Wx::App alle Methoden erbtum ein vollständiges WxPerl-Programm zu sein.
package ServusWelt;
use Wx;
# Bei Listen von Strings ist es mithilfe des Listenoperators qw möglich, auf Kommata und 
# doppelte Anführungszeichen zu verzichten. Die einzelnen Strings werden dann nur 
# durch Leerzeichen getrennt. 
use base qw(Wx::App);
# Lediglich die Methode OnInit definieren wir hier neu, um zu bestimmen was bei Programmstart 
# ausgeführt wird
sub OnInit{
	my $app = shift;
	# Hier wird das Hauptfenster erstellt. Da es kein übergeordnetes Widget hat, 
	# bleibt für den ersten Parameter nur undef,  ID's sind jetzt auch noch unwichtig also 
	# wird der zweite Parameter auf "-1" gesetzt. Parameter 3 ist die Überschrift des Fensters, 
	# Para 4 die Position die per default mittig ist und Para 5 die Größe.
	my $frame = Wx::Frame->new( undef,  -1, 'Mein erstes WxPerl Programm', [-1, -1], [250, 100], );
	# Panel,  Fläche auf der Widgets plaziert werden. Der nackte Hintergrund eines Wx::Frame
	# ist absichtlich optisch nicht dazu geeignet, darauf Knöpfe zu legen, da deren Hintergrundfarbe
	# tranparent ist und damit das dunkle Grau des Hauptfensters annehmen würde. Da das Panel 
  # weder Position noch Größe kennt,  nimmt es automatisch den ganzen Hintergrund des 
	# Hauptfensters ein.
	my $panel = Wx::Panel->new( $frame, -1 );
	# Hier wird auf dem Panel noch ein Text gelegt.
	my $label = Wx::StaticText->new( $panel, -1, 'Dies ist der erste Test!', [65, 20]);
	# Fenster zeichnen
	$frame->Show(1);
	# Fenster als oberstes bestimmem
	$app->SetTopWindow( $frame );
	# Das abschließende 1; ist der Rückgabewert, der uns versichert das die Applikation
	# wiklich gestartet wird.
	1;
}
package main;
# Programminstanz erzeugen und starten
ServusWelt->new->MainLoop;

ServusWelt_1

Zurück