OOP in Python?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
Drake
User
Beiträge: 71
Registriert: Mittwoch 14. März 2007, 15:48
Wohnort: Bremen
Kontaktdaten:

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?
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Hallo auch Drake ... und zu Deinen Fragen, zweimal ja :).
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Drake
User
Beiträge: 71
Registriert: Mittwoch 14. März 2007, 15:48
Wohnort: Bremen
Kontaktdaten:

Danke für die netten Antworten. :)
Benutzeravatar
Drake
User
Beiträge: 71
Registriert: Mittwoch 14. März 2007, 15:48
Wohnort: Bremen
Kontaktdaten:

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
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

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.
Zuletzt geändert von Masaru am Mittwoch 14. März 2007, 16:13, insgesamt 1-mal geändert.
Benutzeravatar
Drake
User
Beiträge: 71
Registriert: Mittwoch 14. März 2007, 15:48
Wohnort: Bremen
Kontaktdaten:

Mit py2exe kann man keine ausführbaren .exe machen ..
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Kann man doch ;).
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

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
Benutzeravatar
Drake
User
Beiträge: 71
Registriert: Mittwoch 14. März 2007, 15:48
Wohnort: Bremen
Kontaktdaten:

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.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

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...
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
Zuletzt geändert von gerold am Mittwoch 14. März 2007, 16:49, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Drake
User
Beiträge: 71
Registriert: Mittwoch 14. März 2007, 15:48
Wohnort: Bremen
Kontaktdaten:

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?
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

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:
Zuletzt geändert von Masaru am Mittwoch 14. März 2007, 16:53, insgesamt 1-mal geändert.
Benutzeravatar
Drake
User
Beiträge: 71
Registriert: Mittwoch 14. März 2007, 15:48
Wohnort: Bremen
Kontaktdaten:

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 ..)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

...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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

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.
Antworten