Pythonmania

Script Different!

Suchen in:
Suche:
In Partnerschaft mit Amazon.de
Startseite | Schockwellenreiter | Impressum
Anzeigen


Hallo Welt - Erste Schritte in Python

In diesem Kapitel gebe ich eine kurze Übersicht über die Elemente der Programmiersprache Python. Es ist nicht als ein Ersatz für ein Tutorial gedacht, sondern soll nur erste Eindrücke vermitteln. Auf spezielle Konstrukte und Besonderheiten der Sprache werde ich jeweils in den entsprechenden Kapiteln eingehen.

Hallo Welt!

Seit Kerningham und Ritchies Einführung in die Programmiersprache C beginnt traditionell jeder Programmierkurs mit einem Programm, das "Hallo Welt!" ausgibt. In Python ist dies besonders einfach. Wir starten den Interpreter, der uns wie folgt begrüßt:


Python 1.5.2b1 (#47, Jan 13 1999, 15:14:59)
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>>

Das Zeichen >>> ist der Systemprompt, der uns mitteilt, daß Python von uns eine Eingabe erwartet. Wir tippen daher:


>>> print "Hallo Welt!"

und der Interpreter antwortet


Hallo Welt!
>>>

gefolgt wieder vom Systemprompt, der uns mitteilt, daß der Pythoninterpreter eine weitere Eingabe von uns erwartet. Auf manchen Systemen ist es übrigens etwas schwierig, den Interpreter zum Beenden zu überreden. Auf allen Systemen kann er mit der Tastenkombination Control-d zum Beenden veranlaßt werden. (Ich erwähne das nur, weil ich am Anfang meiner Python-Karriere wie verrückt im Handbuch nach dieser Tastenkombination gesucht habe.)

Da dies zu einfach ist - in mehr traditionellen Programmiersprachen braucht man dagegen schon ein paar Zeilen mehr, um "Hallo Welt!" auf dem Terminal auszugeben - wollen wir uns jetzt an eine mehr komplizierte und für den Benutzer komfortablere Version des "Hallo Welt!"-Programmes wagen.

Da es jedoch sehr mühselig ist, längere Programme sofort im Interpreter einzugeben und zu testen, starten wir unseren Lieblingseditor und tippen dort folgendes ein:


#!/usr/local/bin/python

import Tkinter from Tkconstants import *
tk = Tkinter.Tk()
frame = Tkinter.Frame(tk, relief = RIDGE, borderwidth = 2) frame.pack(fill = BOTH, expand = 1)
label = Tkinter.Label(frame, text = "Hallo, Welt!") label.pack(fill = X, expand = 1)
button = Tkinter.Button(frame, text = "Exit", command = tk.destroy) button.pack(side = BOTTOM, padx = 4, pady = 4)
Tkinter.mainloop()

Anschließend speichern wir die Datei unter dem Namen "hello.py" ab. Alle Python Quelldateien sollten die Endung .py haben, für importierte Module (mehr darüber später) ist sie sogar zwingend erforderlich.

Die erste Zeile des Codes ist der berühmte UNIX "pound bang hack", der es auf den meisten UNIX-Systemen erlaubt, Skripte direkt zu starten. Die UNIX-Shell sucht den Interpreter im angegebenen Pfad (hier: /usr/local/bin) und startet ihn dann mit der Datei, die diese Zeile enthält. Falls sich ihr Python Interpreter also nicht im Verzeichnis /usr/local/bin befindet, müssen sie die Zeile entsprechend anpassen. Außerdem dürfen Sie auf UNIX-Systemen nicht vergessen, der Datei mit chmod +x[dateiname] für ausführbar zu erklären, sonst erhalten Sie seltsame Fehlermeldungen.

Auf anderen Systemen ist es einfacher, Dateien zum Ausführen zu bewegen. Unter Windows wird in der Regel schon während der Installation die Endung .py mit dem Interpreter verbunden, so daß ein Doppelklick auf die Datei genügt. Auf dem Macintosh schiebt man die Datei einfach auf das Symbol des Interpreters und schon startet das Programm. In BBEdit kann man der zu speichernden Datei ebenfalls die Python-Resource zuweisen, so daß auch hier ein Doppelklick auf das Dateisymbol genügt.

Apropos Editor: Unter Linux empfehle ich den Emacs, für den es einen eigenen Python-Mode gibt, von dem aus man direkt den Interpreter starten kann. Auf dem Macintosh benutze ich, wie oben schon erwähnt, BBEdit, dessen kostenlose »Lite«-Version für Programmierzwecke völlig ausreichend ist. Daneben hält der Shareware-Editor Alpha ebenfalls einen Python-Mode bereit und ist bei vielen Programmierern sehr beliebt.

Unter Windows habe ich keine Empfehlung. Wenn ich einmal unter Windows programmiere »zweckentfremde« (dieses Wort steht noch nicht im Duden Smile) ich den Editor von POW!, der »Programmers Open Workbench«, einer (für private Anwendungen und für Forschung und Lehre) freien Oberon-2 und Java Entwicklungsumgebung vom Forschungsinstitut für Mikroprozessortechnik der Universität Linz.


Hello World!
Abb. 1: Unser erstes Programm

Auf dem Macintosh sieht unser erstes Programm dann wie in Abb. 1 aus, Tkinter sorgt dafür, daß automatisch die jeweils plattformspezifischen GUI-Elemente ausgewählt werden. In nur zehn Programmzeilen haben wir ein vollständiges Programm mit grafischer Benutzeroberfläche geschrieben, sogar der Exit-Button funktioniert! Doch was haben wir in diesem Programm genau gemacht?

In der ersten Zeile wird das Modul Tkinter geladen. Es ist die Schnittstelle zur grafischen Benutzeroberfläche Tk und stellt eine Reihe von Klassen bereit, mit denen die verschiedenen Elemente (Widgets) des GUI angelegt und manipuliert werden können. Ich habe für den Anfang die form import Tkinter gewählt. Sie verlangt, daß im eigentlichen Programm der Name des importierten Moduls zur Identifizierung den Klassen und Methoden vorangestellt werden muß, wie z.B. bei frame = Tkinter.Frame(...). Ebenfalls möglich wäre from Tkinter import *, dann würde viel Tipparbeit erspart bleiben. Die Namen der Klassen und Methoden in Tkinter sind eigentlich recht eindeutig, so daß die oft beschworene Gefahr der Verwechslung nicht auftreten sollte, aber am Anfang sollten Sie auch im Programmcode sehen, welche Klassen und Methoden aus Tkinter importiert werden.

Die zweite Zeile importiert einfach nur eine Reihe von nützlichen Konstanten. In unserem Fall RIDGE, BOTH und BOTTOM.

Danach wird ein Hauptfenster erzeugt (Klasse Tkinter.Tk), in das ein Rahmen (Klasse Frame) gelegt wird. Die Konstruktoren der Klassen in Tkinter unterstützen Schlüsselworparameter. D.h., daß diese Parameter nicht an ihrer Position (erster Parameter, zweiter Parameter ...) sondern an ihren Schlüsselwörtern (text, relief ...) erkannt werden. Das hat den Vorteil, daß nicht alle Parameter bei jedem Aufruf angegeben werden müssen (fast alle Widgets von Tk unterstützen eine riesige Anzahl von Parametern), denn nicht aufgerufenen Schlüsselwortparameter werden einfach von Tk mit (meistens sinnvollen) Defaultwerden verwendet.

Ausnahme ist der erste Parameter. Hier wird immer angegeben, welches das Elternelement (parent oder root) des jeweiligen Widgets ist. Widgets in Tk sind hierarchisch ineinander verschachtelt. So ist der parent des Rahmens die Applikation selber (tk), die danach erzeugten Widgets Label und Button haben dagegen den Rahmen als parent. Nach dem Initialisieren der jeweiligen Widgets wird der Geometrie-Manager pack aufgerufen, der für eine möglichst sinnvolle Verteilung der Elemente in unserem Applikationsfenster sorgt. pack ist der am häufigsten verwendete Geometriemanager von Tk, daneben gibt es aber noch grid, der die Elemente in eine Gitterstruktur legt, und place, mit dem die Elemente direkt mit ihren Koordinaten plaziert werden.

Zu guter Letzt wird die Hauptschleife aufgerufen. Hier wartet das Programm einfach auf weitere Befehle (events), die entweder vom Betriebssystem kommen (z.B. das Fenster wurde überlagert und wieder freigegeben, es muß daher neu gezeichnet werden) oder vom Benutzer ausgelöst werden. In unserem Fall ist das nur das Drücken des Exit-Buttons. Diese Aktion ruft das Kommando destroy auf, das unsere Anwendung beendet.






Werbung: