Seite 1 von 2

OOP in Python?

Verfasst: Mittwoch 14. März 2007, 15:52
von Drake
Hi!

Bin noch ein blutiger Anfänger, aber hab schon zwei kleine Fragen. ;)

1.) Kann man mit Python Windows Applications programmieren?

2.) Währe es damit auch z.B. möglich einen Instant Messenger mit Python auf Windows Basis zu programmieren?

Verfasst: Mittwoch 14. März 2007, 15:55
von Masaru
Hallo auch Drake ... und zu Deinen Fragen, zweimal ja :).

Re: OOP in Python?

Verfasst: Mittwoch 14. März 2007, 15:56
von gerold
Hi Drake!

Willkommen im Python-Forum!

Und hier die "kurzen" Antworten: ;-)
Drake hat geschrieben:1.) Kann man mit Python Windows Applications programmieren?
Ja :-) Z.B. mit http://wxpython.org/
Drake hat geschrieben:2.) Währe es damit auch z.B. möglich einen Instant Messenger mit Python auf Windows Basis zu programmieren?
Ja :-) Z.B. mit http://wxpython.org/

mfg
Gerold
:-)

Verfasst: Mittwoch 14. März 2007, 15:59
von Drake
Danke für die netten Antworten. :)

Verfasst: Mittwoch 14. März 2007, 16:03
von Drake
Ach, bevor ich nen neuen Thread erstelle gleich noch ne Frage:

Ist es dann mit wxPython auch möglich .exe zu erstellen die auch wie normale laufen? Zurzeit gibt es ja py2exe aber da kann man die Exe nur über cmd starten.

Ich weiß, edit wäre besser aber dann hätts keiner gesehen. xD

Verfasst: Mittwoch 14. März 2007, 16:11
von Masaru
Nope .. Du kannst aber Python Anwendungen mittels speziellen Drittanbieter Packaging-Programmen zu ausführbare .exe, etc. umwandeln.

Je nach Tool ist die einfacher und umfangreicher oder auch nicht ;).

Die bekanntesten Tools sind wohl:
- py2exe
und
- PyInstaller

Aber ... wie kommst Du dadrauf, dass die Programme nur über eine CommandShell zu betreiben wären?
Drake hat geschrieben:... Zurzeit gibt es ja py2exe aber da kann man die Exe nur über cmd starten...
Niemand hindert Dich dadran, eine Executable über einen Dateibrowser, aus einem anderen Script herraus (z.B. Batch, Python, Shell, etc.) oder was auch immer herraus aufzurufen ;).

Mit diesen Packaging-Tools kannst Du sogar Anwendungen "paketieren", die dem Verhalten von Com-Servern oder Windows-Diensten entsprechen.

Verfasst: Mittwoch 14. März 2007, 16:13
von Drake
Mit py2exe kann man keine ausführbaren .exe machen ..

Verfasst: Mittwoch 14. März 2007, 16:14
von Masaru
Kann man doch ;).

Verfasst: Mittwoch 14. März 2007, 16:15
von gerold
Drake hat geschrieben:Ist es dann mit wxPython auch möglich .exe zu erstellen die auch wie normale laufen? Zurzeit gibt es ja py2exe aber da kann man die Exe nur über cmd starten.
Hi Drake!

Das hängt nicht von wxPython ab. Dafür ist py2exe oder cx_Freeze zuständig. Wie kommst du darauf, dass diese EXE-Dateien nur über CMD gestartet werden können? Das ist nicht wahr. Du kannst, wie mit jedem anderen Programm, eine Verknüpfung ins Startmenü legen oder das Programm mit einem Doppelklick auf das Icon starten.

Du kannst die mit py2exe oder cx_Freeze erstellten Dateien mit einem Installer zu einem Installationspaket zusammenstellen, wie du es von anderen Programmen gewohnt bist.

http://www.python-forum.de/topic-5726.html

mfg
Gerold
:-)

Verfasst: Mittwoch 14. März 2007, 16:17
von EnTeQuAk
Py2Exe Internetseite hat geschrieben: py2exe is a Python Distutils extension which converts Python scripts into executable Windows programs, able to run without requiring a Python installation.
vielleicht solltest du dir erstmal die Internetseiten und oder die Dokumentationen anschauen.

MfG EnTeQuAk

Verfasst: Mittwoch 14. März 2007, 16:19
von Drake
Aber wenn ich z.B. ein schlichtes Hello World Programm schreibe und in eine .exe konvertiere, dann öffnet sich das Fenster ein paar ms und schließt sich dann wieder.

Verfasst: Mittwoch 14. März 2007, 16:20
von BlackVivi
Drake hat geschrieben:Aber wenn ich z.B. ein schlichtes Hello World Programm schreibe und in eine .exe konvertiere, dann öffnet sich das Fenster ein paar ms und schließt sich dann wieder.
War aber auch zu erwarten oO Selbst wenn du die Python Datei mit einem Doppelklick öffnest, öffnet sich das CMD Fenster kurz und es schließt sich wieder... warum?

Könntest am ende des Programms ein raw_input() machen, wenn du willst oO'' Dann würde es gehen. Aber Konsolapplikationen sollte man eh über CMD aufrufen, sind wohl eher dafür gedacht...

Verfasst: Mittwoch 14. März 2007, 16:30
von gerold
Drake hat geschrieben:Aber wenn ich z.B. ein schlichtes Hello World Programm schreibe und in eine .exe konvertiere, dann öffnet sich das Fenster ein paar ms und schließt sich dann wieder.
Hallo Drake!

Klicke mit der Maus auf "Start", dann auf "Ausführen" und gib in das Textfeld "dir" (ohne Anführungszeichen) ein. Starte das Programm mit einem Klick auf "OK".

Was passiert? Das Programm "dir" ist ein Kommandozeilenprogramm und gibt einfach nur einen Text an die Standardausgabe aus. Das Programm beendet sich aber sofort nach Ende des Programms wieder selbst. Deshalb flickert kurz ein schwarzes Fenster hoch, aber das war es auch schon.

Startest du CMD und führst innerhalb von CMD das Programm "dir" aus, dann bleibt die Anzeige erhalten, weil CMD noch offen bleibt.

Genau so verält es sich auch mit solchen HalloWelt-Programmen, die einfach nur ein "Hallo Welt" an die Standardausgabe schreiben. Diese werden ausgeführt und sofort danach wieder beendet. Führt man diese innerhalb einer CMD-Sitzung aus, dann bleibt die Ausgabe sichtbar, da die CMD-Sitzung weiter läuft. Führt man sie mit einem Doppelklick aus, dann beendet sich das Programm sofort danach wieder.

Wenn du ein Programm schreiben möchtest, das nicht nur einen Text an die Standardausgabe (=STDOUT =print) schreibt, dann musst du ein Framework wie z.B. wxPython benutzen und damit eine GUI entwickeln. Also Fenster definieren, Widgets darauf platzieren und anzeigen lassen. Wie so etwas aussehen könnte, siehst du hier: http://www.python-forum.de/topic-5722.html

Um einfach nur mal kurz einen Text in einem Fenster anzuzeigen, gibt es einen Trick: http://www.python-forum.de/topic-5721.html

mfg
Gerold
:-)

Verfasst: Mittwoch 14. März 2007, 16:36
von gerold
HalloWelt-Programm mit Fensterausgabe:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import wx

wx.SetDefaultPyEncoding("iso-8859-1")
app = wx.PySimpleApp(redirect = True)
print "Hallo Welt"
app.MainLoop()
mfg
Gerold
:-)

Verfasst: Mittwoch 14. März 2007, 16:44
von Drake
Erstmal danke an alle ;D

Dazu hab ich gleich einen Verbesserungsvorschlag: Man sollte eine "Anfänger-Area" einrichten .. Für solche Fragen wie meine ;D

Und noch eine Frage ^^

Code: Alles auswählen

import sys
i = 0
print "Zum schließen bitte exit eingeben!"
exit = ""
stop = raw_input().upper()
while i < 1:
    
    while stop == "exit":
        if stop == "exit":
            sys.exit(0)
        else:
            "Programm wird weitergeführt!"
Das Programm soll solange laufen bis exit eingegeben wird und sich dann beenden .. Es läuft zwar weiter aber die Eingabe von exit hat keine Wirkung .. Woran liegt das?

Verfasst: Mittwoch 14. März 2007, 16:49
von Masaru
Das "raw_input" solltest Du mit in die Schleife packen, damit bei Falscheingaben die Schleife im erneuten Zuge einen neuen Wert vergleichen kann.

Du kannst z.B. auch in Python aus Schleifen mit dem break Statemen ausbrechen.

Beispiel:

Code: Alles auswählen

i = 0
while True
    if i > 10:
        break
    i += 1
In Python verwendet man gerne für eine immer fortwährende Schleife die Kopfdefinition:

Code: Alles auswählen

while True
oder

Code: Alles auswählen

while 1:

Verfasst: Mittwoch 14. März 2007, 16:53
von Drake

Code: Alles auswählen

import sys
i = 0
print "Zum schließen bitte exit eingeben!"
exit = ""

while i < 1:
    stop = raw_input().upper()
    while stop == "stopit":
        if stop == "stopit":
            sys.exit(0)
        else:
            "Programm wird weitergeführt!"

    
Geht trotzdem noch nicht ..

(Hab das exit mal in stopit umbenannt ..)

Verfasst: Mittwoch 14. März 2007, 16:54
von gerold
Drake hat geschrieben:Es läuft zwar weiter aber die Eingabe von exit hat keine Wirkung .. Woran liegt das?
Hallo Drake!

Da musst du wohl noch ein wenig an der Programmlogik arbeiten. :shock:

Viele Wege führen nach Rom -- so auch dieser:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

print "Zum Schliessen bitte 'exit' eingeben!"
while not raw_input().upper() == "EXIT":
    print "Programm wird weitergefuehrt!"
mfg
Gerold
:-)

Verfasst: Mittwoch 14. März 2007, 17:00
von gerold
...und hier eine andere Variante. ;-)

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

print "Zum Schliessen bitte 'exit' eingeben!"
while True:
    if raw_input().upper() == "EXIT":
        break
    print "Programm wird weitergefuehrt!"
mfg
Gerold
:-)

Verfasst: Mittwoch 14. März 2007, 17:02
von Masaru
Kurz zum Beispiel von gerold (meins sieht ähnlich grad hier aus *g*, war nur langsamer).

1.) Wenn Du Sonderzeichen in Deinem Code mit eincodieren möchtest, musst Du die Datei in einem Encoding abspeichern, welches ein gültiger in Codec in der sogenannten "Magic-Line" (die 1. oder 2. Zeile, mit einem # Zeichen eingeleitet) ist, und diesen Codec dort mit auch angeben.

Code: Alles auswählen

# -*- coding: iso-8859-1 -*-
2.) Die Methode <string>.upper() wandelt Buchstabe in Großbuchstaben um, <string>.lower() in Kleinbuchstaben ... falls halt nicht eh schon so vorhanden.

3.) Manchmal ist es geschickter kein explizites sys.exit() zu setzen, auch wenn es verlockt. Wenn ein Programmdurchlauf sein Ende ohne Fehler erreicht hat, beendet der Python Interpreter eh den Aufruf mit dem Exitcode 0.