Pythonmania.de
Script different! Mein Icon

Navigation:

 Startseite
 Python bei O'Reilly
 Python & Tkinter
 Tkinter (deutsch)
 Tkinter (english)
 ftp mit Python
 Dialogboxen
 Kapitän
 Warum Python?
 Erste Schritte
 Grafische Ausgabe
 Das Modul W
 Easy Dialogs
 Mac File Dialogs
 Apfelmännchen
 Piddle & MacOS X
 Dancing Python
 User-Agenten
 XML-RPC
 Blogger API
 Anti-Spam-Script
 Template-Engine
 Python & XML
 Python Cookbook
 Impressum
 Schockwellenreiter

Python Logo

How To: Das Modul W oder Grafische Ausgabe in MacPython

MacPython bringt eine IDE mit, in der sich recht komfortabel arbeiten läßt. Neben einem Interpreter und einem Editor beherbergt sie einen komfortablen Debugger und einen beinahe noch komfortableren Classbrowser. Und da diese IDE in Python selber geschrieben wurde, sind deren Bibliotheken natürlich auch für den normalen MacPython-Skripter nutzbar. Die Hauptarbeit leistet die Klasse W, die eine Reihe von Widgets zur Verfügung stellt.

Also tippen wir doch einfach einmal in den Editor ein:


import W
w = W.Window( (200, 100), "Hello MacPython!")

def buttonCallback(): w.close()

w.button = W.Button( (50, 30, 100, 30), "Good Bye!", buttonCallback) w.open()

Und diese wenigen Zeilen Code belohnen uns mit folgendem Fensterchen:

Hello MacPython

Da die IDE selber das Modul W nutzt, erlaubt uns der Interpreter einen leichten Zugang zu allen Widgets. So ist ein schnelles Testen und Ausprobieren in der besten Tradition des Python Interpreters möglich. Wenn Ihr wissen wollt, ob etwas funktioniert - öffnet in der IDE ein Fenster und probiert es einfach aus. Doch eine Warnung vorab: All dieser Code läuft nicht im normalen Python Interpreter, da W nicht automatisch unterstützt wird, sondern nur in der IDE.

Um auf die W Widgets zuzugreifen, muß erst einmal W importiert werden.

import W

Dann muß ein Fenster deklariert werden:

w = W.Window( (200, 100), "Hello MacPython!")

Die minimalen Parameter, die ein Fenster benötigt, sind die Positions- und Größenangabe und der Titel. Die Positions- und Größenangaben werden von allen Widgets verlangt und werden normalerweise als Tupel (Links, Oben, Weite, Höhe) übergeben. Im Falle eines Fensters reicht die Weite und Höhe, wenn keine absolute Position angegeben wurde, wird das Fenster automatisch plaziert.

Wenn wir ein Fenster definiert haben, können ihm weitere Widgets zugewiesen werden:

w.button = W.Button( (50, 30, 100, 30), "Good Bye!", buttonCallback)

Solange keine dynamischen Änderungen geplant sind, sollten die Widgets definiert werden, bevor das Fenster mit w.open() geöffnet wurde. Unser Button erhält als ersten Parameter die schon besprochene Positions- und Größenangabe, der zweite Parameter ist die Beschriftung und als dritten Parameter übergeben wir eine Callback-Funktion. Funktionen sind in Python First-Order-Elemente und können daher wie Variablen ohne irgendwelche Pointer-Hampelei direkt übergeben werden. Unsere Callback-Funktion hatten wir vorher schon definiert, sie schließt einfach das Fenster wieder:


def buttonCallback():
   w.close()

Das ist alles. Falls wir jedoch mehr als nur Triviales mit dem Modul W anstellen wollen, ist es in der Regel notendig, Subklassen aus den vorhandenen Widgets zu bilden. Zumindest die Methode draw(), die von allen Widgets aufgerufen wird, wenn ein Neuzeichnen ansteht, muß überschrieben werden, wenn wir grafische Ausgaben in einem Fenster wünschen. Aber auch das ist leicht erledigt, wie folgendes Beispiel zeigt:


import W

class WB(W.Window): def draw(self, visRgn = None): import Qd Qd.RGBForeColor( (0, 50000, 50000) ) Qd.PaintOval( (105, 15, 245, 90) ) Qd.RGBForeColor( (0, 0, 0) ) Qd.MoveTo(115, 65) Qd.LineTo(228, 65) Qd.MoveTo(116, 55) Qd.TextSize(20) Qd.DrawString("Welcome to") Qd.MoveTo(15, 150) Qd.TextSize(62) Qd.DrawString("MacPython")

dw = WB( (75, 75, 425, 250), "MacPython") dw.open()

Dieses winzige Progrämmchen erfreut uns mit folgendem voll funktionsfähigem Fenster:

Welcome to MacPython

Wir definieren hier eine Klasse W, die wir von W.Window ableiten. Die einzige Funktion, die überschrieben wird ist draw(). Hier importieren wir Qd, das Modul, das sämtliche QuickDraw-Befehle, die Befehle, die für die grafische Ausgabe des Macintosh zuständig sind, bereit hält. Wir definieren dann türkis als Vordergrundfarbe, zeichnen damit ein gefülltes Oval, setzen die Vordergrundfarbe auf Schwarz zurück um einen Strich zu ziehen und einigen grafischen Text auszugeben.

Dann instantiieren wir mit dw unsere neue Klasse und geben ihr den Befehl, sichtbar auf dem Bildschirm zu erscheinen.

dw = WB( (75, 75, 425, 250), "MacPython")
dw.open()

Zum Beenden des Programms verlassen wir uns diesmal auf die Tatsache, daß die Betätigung des Schließknopfes eines Fensters ebenfalls das dazugehörige close() aufruft.

So lassen sich in MacPython grafische Ausgaben noch leichter realisieren, als in MacPerl. Doch eine Warnung zum Schluß: Während es für MacPerl überhaupt keine Alternativen gibt, kann man in Python die grafische Ausgabe auch immer in Tkinter - und das auch sehr komfortabel - programmieren. Tkinter ist betriebssystemunabhängig, diese Skripte laufen auf *NIX, Windoofs und Mac, grafische Ausgaben mit W sind dagegen auf den Mac beschränkt.

Wer aber sowieso nur vorhat, für den Mac zu schreiben, hat mit W eine leicht zugängliche und - da innerhalb der IDE gearbeitet werden kann (was mit Tkinter nicht möglich ist) - äußerst komfortable Umgebung für die Programmierung von GUI und Grafik. Es werden hier mit Sicherheit in der nächsten Zeit noch einige weitere Beispiele folgen.


Literatur:

W Widget Einführung und Referenz (in Englisch).


Mein Icon © Copyright 2000 - 2002: Jörg Kantel.
Last update: 13.10.2002; 21:34:00 Uhr.
This site is edited with Radio UserLand, the first personal Web Application server for Windows and Macintosh.  Let iCab smile  Site Meter