# Python und GUI programmierung, where to start?

## STiGMaTa_ch

Guten Morgen zusammen

Ich muss kurz ausholen um zum Thema zu kommen.

Ich bin seit einiger Zeit dabei meine alte Spielesammlung (besonders die Floppy's) auf den PC zu kopieren. Gleichzeitig spiele ich diese Games auch kurz an um zu prüfen ob alles korrekt funktioniert hat. Das ganze mache ich Momentan unter Windows mit dosbox. Um mir das Leben zu vereinfachen habe ich mir ein Frontend gesucht. Nach ein wenig herumprobieren bin ich dabei auf D-Fend gestossen welches für meine Zwecke ideal ist.

Das Problem ist nun, dass die letzte D-Fend Version mit dem aktuellsten Dosbox 0.65 nicht mehr sauber zusammen arbeitet (Eingestellte Optionen werden nicht Dosbox konform umgesetzt). Leider scheint der Entwickler auch kein Interesse mehr an der Weiterführung zu hegen. Was mich auch immer gestört hat, ist die Windowslastigkeit des Tools, denn ich würde gerne bei Auslandaufenthalten alte Klassiker (Monkey Island und co) unter Linux spielen, jedoch mit einem Frontend.

(Fertig ausgeholt, hier geht es um das eigentliche Problem  :Smile:  )

Nun habe ich mir gedacht, dass ich so ein Frontend selber zusammenbasteln könnte. Zuerst habe ich an GTK oder Xdialog gedacht. Doch bei GTK müsste ich erst C lernen (Okay, es gibt phpgtk was man ev. noch benutzen koennte) und Xdialog sieht mir zu popelig aus.

Nach einer Weile bin ich auf die wxwidgets und Python gestossen. Nachdem ich einige Beispiele angeschaut habe muss ich sagen, dass python wirklich eine interessante Sprache darstellt und ich mir diese gerne aneignen möchte.

Die Frage ist nun, wo fange ich an? Am liebsten wäre mir ein Buch (On- oder Offline) welches sich in den ersten paar Kapiteln mit Python und in späteren Kapiteln mit GUI Programmierung (z.B. wxwidgets (resp. wxPython) oder Tkinter) auseinander setzt. Dabei muss es nicht wirklich für "Erstprogrammierer" geschrieben sein. 

Hat jemand von euch schon mit einem Buch/Link Erfahrungen gesammelt und kann dies weiterempfehlen? 

Lieber Gruss

STiGMaTa

----------

## lr

Zum Thema Frontends für DOSBox:

DOSBoxGUI

DOSBoxer

DOSBoxFE

vielleicht gehts ja auch ohne coden  :Smile: 

lr

----------

## STiGMaTa_ch

 *lr wrote:*   

> Zum Thema Frontends für DOSBox:
> 
> DOSBoxGUI
> 
> DOSBoxer
> ...

 

Danke für die Links. Aber ich kenne die Programme schon und leider reichen die nicht an D-Fend heran. Z.b. bietet keines der Programme eine Datenbank für die Spiele Informationen (Publisher, Erscheinungsjahr, Genre etc.) an, so wie das D-Fend macht.  Auch fehlen mir bei den meisten der Frontends (bis auf DOSBoxer natürlich) die Möglichkeit Screenshots der Games beim durchstöbern anzuzeigen. Ausserdem möchte ich einen Frontend haben der sowohl unter Windows wie auch unter Linux funktioniert und ich somit die erstellten Konfigurationen einfach sharen kann. Und, und, und...

Es sind halt viele kleine Nettigkeiten, welche D-Fend das Frontend meiner Wahl gemacht haben.

 *lr wrote:*   

> vielleicht gehts ja auch ohne coden 

 

Ich denke eher nicht  :Sad:  Ausser jemand kennt wirklich einen gut gehüteten Geheimtipp, welchen er mit mir teilen möchte.

Ausserdem wäre die Realisierung eines solchen Frontends ideal um mich mit Python und GUI Programmierung auseinander zu setzen.

Lieber Gruss

STiGMaTa

----------

## lr

Vielleicht kannst Du ja auch Java verwenden als unabhängige Sprache.

Da könnt ich Dir ne Menge Bücher und Links zu liefern  :Smile: 

Grüße

lr

----------

## return13

Hab bisher immer wieder von Python gehört, aber mich nie damit beschäftigt - bin persönlich eher ein C/C++ Liebhaber...

Aber habs mir mal wegen deinem Thread angesehen [url=http://de.wikipedia.org/wiki/Python_(Programmiersprache)]Wikipedia[/url] und dieses Beispiel das die da bieten...

```

[b]Fakultätsfunktion in C (mit Einrückung):[/b]

int factorial(int x)

{

    if(x == 0) {

        return 1;

    }

    else {

        return x * factorial(x - 1);

    }

}

[b]gleiche Funktion in Python:[/b]

def factorial(x):

    if x == 0:

        return 1

    else:

        return x * factorial(x - 1)

```

Ist echt bisschen übertrieben und teilweise lächerlich... In C/C++ kann man das auch abkürzen... dann sähe das so aus:

```

int factorial(int x)

{

    if(!x) 

        return 1;

    else 

        return x * factorial(x - 1);

  

}

```

Also von der schreibweise her nimmt sich das denk ich nicht viel...

----------

## firefly

für wxpython gibt es nun auch ein buch  :Wink: 

http://www.wxpython.org/

----------

## Knieper

Fuer Python <-> QT gibt es ein Buch: http://www.commandprompt.com/community/pyqt/ ich wuerde aber Tkinter benutzen, weil man damit einfach am wenigsten Probleme hat. Es ist bei vielen Installationen dabei, man findet viele Beispiele und muss sich nicht erst in QT (pyqt)/GTK (pygtk) einarbeiten (bzw. gar installieren).

----------

## Vaarsuvius

python ist eine schoene sprache  :Smile: 

und wenns nur um frontends geht, dann finde ich braucht man sich zB wg. Geschwindigkeitsvorteilen nicht irgendwie mit C "rumplagen", soviel bringts da nicht. (C Liebhaber moegen mir das jetzt verzeihen  :Wink:  )

Fuer die graphische oberflaeche wuerde ich pygtk waehlen.

hier ein paar links:

PyGTK Homepage

PyGTK Referenz

Ein erstes Tutorial

es gibt sonst auch noch massenhaft tuts zu dem thema im netz, einfach mal google arbeiten lassen.

ist schon ne weile her, dass ich was mit python gemacht habe, ich fands aber immer recht angenehm zu programmieren.

edit: achso ja ein python buch hatte ich mir damals ausgeliehen, ich kann dir noch nachschauen wie das hiess

edit2: find den namen nicht mehr, aber ich weiss noch dass es von o'reilly warLast edited by Vaarsuvius on Fri May 05, 2006 1:49 pm; edited 1 time in total

----------

## Hilefoks

Moin,

ich programmiere selbst u.A in Python und habe oft vor der Entscheidung gestanden mir ein geeignetes Toolkit suchen zu müssen. Da ich selbst sowohl KDE als auch Xfce nutze ist die Wahl immer schwer, - auf dem einem System ist kein GTK, auf dem anderen kein Qt. Vor allem ist es aber auch besonders schwer, wenn das Programm später auch unter Windows laufen soll, obwohl es natürlich fast alle Toolkits auch für Windows gibt.

Unter Python lassen sich meiner Meinung nach sowohl GTK als auch Qt konforabel programmieren, - für einfache Applikationen nutze ich aber, insbesondere wenn die Portierung auf Windows hinzu kommt, Tk.

Tk sieht zwar unter Unix scheiße aus, - dafür wird es aber bereits mit Python ausgeliefert und erzeugt so keine weiteren abhängigkeiten die unter Windows Probleme verursachen könnten.

Außerdem wird Tk, zumindest grundlegend, in fast jedem Python-Buch beschrieben.

Daher halte ich für deine Applikation Tk für am geeignetsten.

MfG Hilefoks

----------

## derFrank

Also ich bin schon vor einiger Zeit auf Python umgestiegen, ist halt ne tolle Sprache, und der wxPython Wrapper für die WXWidgets ist imho auch eine gute Wahl, da man hierbei nämlich plattformunabhängig bleibt (naja, die im allgemeinen etwas gewagte Auslegung des Begriffs plattformunabhängig sei hier mal dahingestellt,  wxPython läuft afaik auf Linux(GTK), Mac und MS Windows).

Zum Einstieg in Python kann ich hier eins der Tutorials empfehlen, die auf der offiziellen Homepage verlinkt sind, der erfahrene Programmierer kann sich Python sicherlich mal eben übers Wochenende schon einigermaßen aneignen, aber auch für Programmierneulinge stellt Python sicherlich einen guten Einstieg in die Programmierung dar, da die Sprache halt zum einen recht leicht zu lernen ist, zum anderen aber auch für viele "ernstzuhehmende" Projekte jenseits von "hello world" noch eine gute Wahl darstellt.  

Für wxPython kann ich nur wärmstens das oben schon erwähnte Buch "wxPython in Action" von Robin Dunn empfehlen. Bin noch nicht ganz durch, kann aber jetzt schon sagen das es einen sehr guten Überblick über die Fahigkeiten und Benutzung von wxPython gibt und auch mal an entsprechenden Stellen etwas mehr ins Detail geht. Für Programierer die vorher noch nicht mit GUI-Programmierung in Berührung gekommen sind, dürfte z.B. speziell der Teil über das Event-Handling wertvoll sein. Die im Netz verfügberen Tutorials zu wxPython haben mich nicht sowirklich überzeugt, da sie meistens nur einzelne Aspekte der GUI-Programmierung ansprechen und meiner Meinung nach nicht wirklich ausführlich genug erklären.

hth Frank

----------

## Ampheus

Der Tipp mit Perl ist da an sich weniger hilfreich, da Perl sich wirklich wenig von C unterscheidet, was ja von vornherein ausgeschlossen wurde. Es gibt Quellcodes für dasselbe Programm in beiden Sprachen, die sich nur bei der Header-Dateien-Einbindung unterscheiden.

----------

## _hephaistos_

 *Ampheus wrote:*   

> Der Tipp mit Perl ist da an sich weniger hilfreich, da Perl sich wirklich wenig von C unterscheidet, was ja von vornherein ausgeschlossen wurde. Es gibt Quellcodes für dasselbe Programm in beiden Sprachen, die sich nur bei der Header-Dateien-Einbindung unterscheiden.

 

steh wahrscheinlich gerade auf dem schlauch. kann mir das nicht vorstellen. könntest du mir ein beispiel mal pasten?

@author: wenn du erfahrung mit objektorientierung hast, dann nimm C++ mit QT (QTDesigner und KDevelop - damit kann man extrem schnell und einfach GUIs erstellen) oder Java. is beides leicht zu verwenden und man kommt schnell zu einem ergebnis...

cheers

----------

## rukh

 *_hephaistos_ wrote:*   

> @author: wenn du erfahrung mit objektorientierung hast, dann nimm C++ mit QT (QTDesigner und KDevelop - damit kann man extrem schnell und einfach GUIs erstellen) oder Java. is beides leicht zu verwenden und man kommt schnell zu einem ergebnis...
> 
> cheers

 

Ich denke, dass er da mit Python besser dran ist. Wenn ich an Stringverarbeitung in C++ oder Java denken muss, wird mir zumindest immer ganz schlecht (von C will ich schon mal gar nicht reden).  :Wink: 

@Topic: Ich habe sehr gute Erfahrungen mit PyGTK gemacht. Funktioniert recht gut und mit Glade Unterstützung lassen sich da in sehr kurzer Zeit nette GUIs zimmern, die dann als XML eingebunden werden können.

----------

## _hephaistos_

 *rukh wrote:*   

> Ich denke, dass er da mit Python besser dran ist. Wenn ich an Stringverarbeitung in C++ oder Java denken muss, wird mir zumindest immer ganz schlecht (von C will ich schon mal gar nicht reden). 

 

was is in c++ bzw. java so schlimm daran??

----------

## lr

Meine Meinung. Java hat ein wunderbares Stringhandling.

lr

----------

## Fauli

Es liegt ja nicht an der Sprache an sich, wie einfach das Stringhandling ist, sondern an der Mächtigkeit der String-Klasse. Beispielsweise kann man in Python von einem String beliebige führende Zeichen mit lstrip entfernen. (Diese Funktionalität bietet die String-Klasse in Java nicht.)

```
$ python -c 'print "*******ABC".lstrip("*")'

ABC
```

Der Thread wird zwar jetzt immer mehr OT, hier aber nochmal die Fakultätsfunktion "the pythonic way"

(einfach mal an der Konsole "python -m this" eingeben!):

```
def factorial(n):

        from operator import mul

        return reduce(mul, xrange(2, n+1), 1)
```

Die Stringverarbeitung wird durch solche Konstrukte auch einfacher und trotz der Kürze nicht unbedingt unleserlicher:

```
attributes = {"class":"link", "width":"25", "align":"left"}

print "<td%s>" % "".join(' %s="%s"' % item for item in attributes.iteritems())

<td width="25" align="left" class="link">
```

----------

## Ampheus

Ei sorry, ich meinte Java. Hab mich vertippt. Aber hier nochmal ein nützliches Tutorial:

http://download.berlios.de/abop-german/byteofpython_120.pdf

----------

## _hephaistos_

warum kommt man bei einem "sprachvergleich" immer mit der fakultätsberechnung? weiß ja net, wie oft man in einem GUI Programm die Fakultät berechnen muss...   :Rolling Eyes:   (oder mach ich was falsch???)

geniale argumente bringst du da  :Wink: 

ich kann schon einige sprachen (mostly c-like syntax) aber dein beispiel find ich nicht wirklich gut, wenn du werbung für die sprache machen möchtest. als abschreckung wärs gut.

und wenn ich über "stringbehandlung" rede geht mein erster gedanke nicht in richtung "entferne die 1. zeichen... blablabla"... konkatenieren, kopieren etc. sind für mich vorrangig.

daher find ich java/c++ auch so toll, weil man da leserlichen code schreiben kann! (und jetzt hört auf mit "in python wird man durch die einrückungen gezwungen schönen code zu schreiben" ->> LOL STFU)

aber das is jetzt OT und gehört wieder mal nicht hierher.

cheers

----------

## rukh

Gut langsam ist es echt ordentlich OT:

Meiner Meinung nach, ist es halt in Skriptsprachen viel schöner mit Strings umzugehen (Perl, PHP, Ruby, Python). Natürlich hat C(++) und Java vernünftige String Funktionen, sonst würden ja sehr viele Programme nicht funktinionieren, aber von der Anwendung her finde ich Skriptsprachen sehr komfortabel.

----------

## STiGMaTa_ch

Holla... mit soviel Reaktionen hatte ich nicht gerechnet...  :Smile: 

Ich beantworte einfach mal der Reihe nach  :Smile: 

@firefly

 *Quote:*   

> für wxpython gibt es nun auch ein buch 
> 
> http://www.wxpython.org/

 

Ja das hatte ich auch gesehen. Falls ich kein gescheites Tutorial im Netz finde und ich mich für wxpython entscheide werde ich mir wohl das ebook kaufen.

@Knieper

 *Quote:*   

> Fuer Python <-> QT gibt es ein Buch: http://www.commandprompt.com/community/pyqt/ 

 

Danke, den pyqt hatte ich irgendwie übersehen. Was hätte pyQT denn für einen Vorteil gegenüber z.B. tkinter?

@kil

 *Quote:*   

> Fuer die graphische oberflaeche wuerde ich pygtk waehlen.

 

Hmm... Ja, das wäre nicht mal schlecht. Wenn ich mich recht erinnere würde unter Windows das ganze dann wie eine native Anwendung aussehen oder? Das wäre natürlich cool.

 *Quote:*   

> edit: achso ja ein python buch hatte ich mir damals ausgeliehen, ich kann dir noch nachschauen wie das hiess
> 
> edit2: find den namen nicht mehr, aber ich weiss noch dass es von o'reilly war

 

Ich hatte zu Python auch ein Buch gefunden von O'Reily. Den Namen weiss ich aber schon nicht mehr, da die Kritiken eher schlecht waren. Angeblich würden die Autoren immer mit C++ vergleichen und hätte das Buch auch gleich "Umstieg von C++ zu Python" nennen können...

@Hilefoks

 *Quote:*   

> Unter Python lassen sich meiner Meinung nach sowohl GTK als auch Qt konforabel programmieren[...]Tk sieht zwar unter Unix scheiße aus, - dafür wird es aber bereits mit Python ausgeliefert und erzeugt so keine weiteren abhängigkeiten[...]Daher halte ich für deine Applikation Tk für am geeignetsten.

 

Wenn ich für den Anfang für die GUI Tk verwende und später gerne auf z.B. GTK wechseln möchte, ist die Umstellung dann kompliziert? So wie ich OOP verstanden habe - Ja, auch das ist Neuland für mich - erstelle ich doch eigentlich Klassen welche die Funktionalität beinhalten und benutze für die Visualiserung die Klassen aus dem tkinter Paket. Von daher sollte ich doch einfach den Visualisierungspart austauschen können, oder?

@_hephaistos_

 *Quote:*   

> wenn du erfahrung mit objektorientierung hast, dann nimm C++ mit QT[...]oder Java

 

Danke für den Tipp. Aber leider ist OOP ebenfalls Neuland für mich.

@Ampheus

 *Quote:*   

> Aber hier nochmal ein nützliches Tutorial:
> 
> http://download.berlios.de/abop-german/byteofpython_120.pdf

 

Danke Ampheus. Das Buch habe ich gestern Abend ebenfalls gefunden und mich mal eingelesen. Werde mir heute - trotz des schönen Wetters - den Rest mal reinziehen.

@rukh

Dein Link http://rukh.de/ führt bei mir zu einem 500er (Internal Server Error)  :Wink: 

@all

Wenn man nun pygtk, pyqt, tkinter und pywidgets vergleicht, was unterscheidet diese dann im wesentlichen voneinander? Oder anders gefragt, welches sind die Kriterien, damit ich mich für das eine oder andere entscheide (ausser persönliche Vorlieben)?

Lieber Gruss

STiGMaTa

----------

## mrsteven

Du sagst, OOP sei Neuland für dich? Dann solltest du dich unbedingt mit diesem Thema auseinandersetzen, bevor du mit der GUI-Programmierung anfängst, denn praktisch alle GUI-Toolkits bzw. -Wrapper sind objektorientiert aufgebaut. Ich empfehle dir folgende Reihenfolge:

Fange mit den Grundlagen von Python an, das Tutorial auf der Python-Homepage ist eigentlich ganz gut.

Dann beschäftigst du dich ein wenig mit OOP, also: "Was ist eine Klasse?", "Was ist Vererbung?" usw...

Jetzt schaust du, wie das ganze mit Python realisiert wird.

Und schließlich lernst du das Programmieren von grafischen Oberflächen.

Gtk schaut unter Windows mit irgendeinem Theme so ähnlich aus wie native Windows-Anwendungen, ist aber nicht ganz das gleiche. Wenn du die Windows-Steuerelemente unter Windows haben willst, verwende am besten wxPython. Du solltest dir deine Wahl aber gut überlegen, denn der Umstieg auf ein anderes Toolkit ist mit einer Menge Arbeit verbunden, da sich die Dinger doch zum Teil stark im Aufbau unterscheiden.

----------

## lr

Jau, dem stimm ich voll und ganz zu. Ohne OOP macht das GUI Programmieren keinen wirklichen Sinn.

Ist zwar Java-Buch, aber die Grundlagen von OOP bringt es Dir auch näher:

zum Online-Buch

Grüße

lr

----------

## rukh

@Link: Host hat Updates versemmelt und jetzt läufts wieder.  :Wink: 

So, die Unterschiede zwischen den Toolkits? Erstmal benötigst Du natürlich für alle die Libraries auf dem Zielsystem. Dann hängt es natürlich ganz von Deinen Vorlieben ab (Qt sieht bekloppt aus, GTK krisch Plag von...). Ansonsten hast Du natürlich, ich gehe hier mal von den "großen" Toolkits PyGTK und PyQt aus, unterschiedliche Systeme unter der Haube. GTK komplett in C geschrieben mit Pseudo C OOP und Qt in C++ mit komplett OOP. 

TK ist, soweit ich weiss, das kleinste System von allen. Da aber zb unter Windows sowieso nichts von Haus aus mitkommt muss man ja eh alles, was man verwenden will, installieren (auch Python). Daher sollte eigentlich die Größe keine Rolle spielen.

Wie ich schon sagte, lassen sich mit Glade einfach GTK Oberflächen erstellen, die per XML eingebunden werden können. QtDesigner mit PyQt bietet warscheinlich ähnliches. Dies hast Du bei den "kleineren" Kits natürlich nicht, also musst Du alles von Hand machen.

Ansonsten bleiben, glaube ich, nur persönliche Vorlieben übrig.

----------

## STiGMaTa_ch

Tja, das Weekend ist fast um und ich habe noch kein Bit geschrieben. Geschweige denn ein Konzept erstellt  :Sad: 

Dafür bin ich jetzt um das Wissen einer Programmiersprache reicher  :Smile: 

Falls sich mal jemand anders dafür entscheidet mittels Python from zero to hero aufzusteigen, dem empfehle ich folgendes Vorgehen welches im Prinzip dem von mrsteven enspricht.

1.) Lies dich in die Grundlagen von Python ein. Am besten, einfachsten und lehrreichsten geht das mit "A Byte of Python". Dieses Dokument bringt dir in kürzester Zeit die nötigen Grundlagen näher (~1 Weekend). [Deutsch]

2.) Obwohl a byte of python auch das Objektorientierte Programmieren erklärt, finde ich nachfolgendes Python bezogene OOP Tutorial einfach nur Genial. Anhand eines kleinen Projektes wird man ganz elegant in oop eingeführt (~1-2 Stunden). [Deutsch]

3.) Was dir jetzt noch fehlt sind die Grundlagen für die GUI Programmierung. Wenn man noch nie mit einer GUI gearbeitet hat, muss man erst mal einige Grundlegende Dinge kennenlernen. Dafür ist das bereits integrierte Tkinter bestens geeignet. Mit nachfolgendem Tutorial hat man dann alles nötige bei der Hand um entweder sofort mit der GUI Programmierung (und Tkinter) loszulegen oder zumindest die nötigsten Grundlagen um sich anderweitig einzulesen (~4-5 Stunden). [Englisch]

Lieber Gruss

Python Master of Desaster

STiGMaTa

----------

## l3u

Ich würd's trotzdem mit Perl machen ;-)

EDIT:

Hey cool! Für diesen schlauen Spruch bin ich glatt grad 1337 geworden! DAS IST EIN ZEICHEN *lol*

----------

## mrsteven

Wenn du so weitermachst, dann schaffst du es auch noch zum Veteran...  :Wink: 

```
++postcount;
```

----------

