wxPython

Ich möchte euch hier einmal einen Einblick in wxPython geben. wxPython ist die Python-Bindung an das GUI-Toolkit wxWidgets, das von Robin Dunn und etlichen anderen Entwicklern geschrieben wurde. wxWidgets, das früher wxWindows hieß, ist ein modernes Toolkit, dass seit 1993 in Entwicklung ist.
Debian- und Ubuntu- User können wxPython mittel apt-get oder mit Synaptic installieren. Alle anderen müssen sich die aktuelle Version hier herunter laden.

Wir starten mit einer simplen Anwendung. Unser erstes Script wird lediglich ein kleines Fenster darstellen.

 

#!/usr/bin/python


import wx

app = wx.App()

frame = wx.Frame(None, -1, 'simple.py')
frame.Show()

app.MainLoop()



Die erste Zeile ist ein Shebang gefolgt von Pfad zum Python-Interpreter.

Mit import wx importieren wir die wxPython modules. Namentlich den core, controls, gdi, misc und die Fenster.

Technisch betrachtet ist wx ein namespace. Alle Funktionen und Objekte des Basis-Moduls starten mittels der wx-Anweisung.

Mit der Zeile:

app = wx.App()

erzeugen wir ein Applikations Objekt.
Jedes wxPython Programm muss ein solches Objekt beinhalten.

Frame = wx.Frame (None, -1, 'simple.py')

frame.Show()

Hiermit kreieren wir ein wx.Frame Objekt. Ein wx.Frame widget ist ein wichtiges container widget welches als parent Objekt für andere widgets dient. In der Hierarchie der widgets ist es im Top-level Bereich und besitzt selbst keine Eltern Objekte.

In den Klammern deklarieren wir deshalb None für parent; -1 frei gewählt als ID und 'simple.py' als Titel unseres Scriptes.

Nachdem wir unser widget gebildet haben müssen wir nun die
frame.Show()

Methode aufrufen, damit unser Fenster auch angezeigt wird.

App.MainLoop()

Die mainloop ist eine Endlosschleife welche alle Events die während der Ausführung unserer Applikation auftreten an das User Interface ausliefert.

Dies ist ein wirklich minimalistische Programm, dass geradezu danach schreit erweitert zu werden.

Aber man sollte immer bedenken, dass es nicht erforderlich ist das Rad neu zu erfinden!

Um das gleiche Programm mit PyQt4 darzustellen gibt man folgende Zeilen ein.

#!/usr/bin/python

# simple.py

import sys
from PyQt4 import QtGui

app = QtGui.QApplication(sys.argv)

widget = QtGui.QWidget()
widget.resize(250, 150)
widget.setWindowTitle('simple.py')
widget.show()

sys.exit(app.exec_())

Dabei ist natürlich zu beachten, dass ich mir vorher die PyQt4-Tools mittels 'apt-get install' oder synaptic installieren muss!

Weiter mit wxPython

Das nächste Programm ist schon ein wenig umfangreicher aber immer noch sehr einfach nach zu vollziehen.

Erklärung:
Zu Beginn des Programms importieren wir wx.
if __name__=='__main__': bedeutet, dass das Script als Hauptdatei ausgeführt wird. D.h. bei Aufruf des Script-Namens wird der nachfolgende Code sofort ausgeführt.
Mit app=wx.PySimpleApp() erzeugen wir das, bei Programmaufruf, sich öffnende Fenster. (siehe Bild wxPython2)
Dann erstellen wir eine Python-Liste -hier "liste" genannt- mit den Artikeln die ausgewählt werden können.
Wir deklarieren eine Variable -hier modal (frei wählbar)- und sagen, dass aus der Liste nur ein Artikel ausgewählt werden kann (SingleChoice).

In die Klammern kommen, der Reihe nach:

- Die Parent-Klasse: hier None - unser Modal steht allein, nicht als child unter- oder innerhalb einer Parent-Klasse.
- Der Titel der auszuwählenden Artikel.
- Der Titel des sich öffnenden Fensters.
- Die Artikel die zur Auswahl stehen, hier die Variable - "liste".

import wx

if __name__=='__main__':
    app=wx.PySimpleApp()


    liste=['Hafer','Gerste','Luzerne','Leinsamen']
    modal=wx.SingleChoiceDialog(None, "Futtermittel", "Ihre Bestellung", liste)
    if modal.ShowModal() == wx.ID_OK:
        wx.MessageBox ("Sie haben %s bestellt !\n" % modal.GetStringSelection())
    modal.Destroy()

Dann bestimmen wir, dass eine Ausgabe erfolgen soll wenn der OK-Button geklickt wird.
%s ist hier der Platzhalter für den String, des ausgewählten Artikels, der mit der GetString-Methode geholt wird.
Zum Schluss sorgen wir mit Destroy dafür, dass das Fenster wieder geschlossen wird.

Wenn wir den "OK"-Button anklicken erscheint eine Message-Box mit der Information welche Bestellung wir getätigt haben.