
hallo liste über python.org und einige links bin ich auf das modul pygame (www.pygame.org) gestoßen. es wurde beschrieben, dass sich damit nicht nur spiele programmieren lassen sondern dass das modul allgemein für kleinere animationen geeingnet ist. meine freude war zunächst groß, da das genau das ist, was ich momentan benötige. die ersten probleme traten jedoch schon beim schließen eines einfachen fensters auf. mir stürzt das gesamte python jedesmal ab. gibt es jemanden, der mir hierbei helfen könnte? Die zeilen sind eingentlich recht einfach: import pygame pygame.display.init() #Erstellt das Fenster if pygame.event.peek([MOUSEBUTTONDOWN,KEYBUTTONDOWN]: #=1 wenn maus/taste betätigt wird pygame.display.quit() weiterhin würde mich auch interessieren, ob man Tkinter und pygame gleichzeitig verwenden könnte. Es wäre ja ganz praktisch, nur die zu animierenden Objekte mit pygame zu bearbeiten und dann in ein tkinter-fenster einzufügen. Oder gibt es vielleicht ein mit pygame vergleichbares Modul? Danke für die Hilfe Kathleen -- +++ GMX - Mail, Messaging & more http://www.gmx.net +++ NEU: Mit GMX ins Internet. Rund um die Uhr für 1 ct/ Min. surfen! _______________________________________________ Python-de maillist - Python-de@starship.python.net http://starship.python.net/mailman/listinfo/python-de

Hallo Kathleen, Kathleen Dennler wrote:
momentan benötige. die ersten probleme traten jedoch schon beim schließen eines einfachen fensters auf. mir stürzt das gesamte python jedesmal ab. gibt es jemanden, der mir hierbei helfen könnte? Die zeilen sind eingentlich recht einfach:
import pygame
pygame.display.init() #Erstellt das Fenster
if pygame.event.peek([MOUSEBUTTONDOWN,KEYBUTTONDOWN]: #=1 wenn maus/taste betätigt wird pygame.display.quit()
ich habe keine Ahnung von pygame, aber mir fällt auf, dass am Ende der if- Anweisung eine runde Klammer fehlt. Wenn du ein Modul importierst, dass so einen Syntaxfehler enthält, könnte das wohl einen Programmabbruch zur Folge haben. ;-) Viele Grüße Stefan _______________________________________________ Python-de maillist - Python-de@starship.python.net http://starship.python.net/mailman/listinfo/python-de

Kathleen Dennler schrieb:
hallo liste
über python.org und einige links bin ich auf das modul pygame (www.pygame.org) gestoßen. es wurde beschrieben, dass sich damit nicht nur spiele programmieren lassen sondern dass das modul allgemein für kleinere animationen geeingnet ist. meine freude war zunächst groß, da das genau das ist, was ich momentan benötige. die ersten probleme traten jedoch schon beim schließen eines einfachen fensters auf. mir stürzt das gesamte python jedesmal ab. gibt es jemanden, der mir hierbei helfen könnte? Die zeilen sind eingentlich recht einfach:
Hallo Kathleen! Ich bin ja auch nicht gerade ein pygame-Spezialist (sondern eher neugierig darauf, was andere damit anfangen ...), aber ich will trotzdem hier eine kleine Hilfestellung versuchen: zunächst enthält dein Code neben dem von Stefan erwähnten Fehler noch zwei weitere einfache: (1) MOUSEBUTTONDOWN,KEYBUTTONDOWN ... was soll denn das bedeuten? Meintest du etwa pygame.MOUSEBUTTONDOWN ... ? Gibt's nicht. Vielmehr sind diese "Konstanten" in pygame.constants definiert, und du kannst alle diese Konstanten mit der from ... import * Anweisung bekannt machen. (2) KEYBUTTONDOWN heißt in Wahrheit KEYDOWN
import pygame
pygame.display.init() #Erstellt das Fenster
if pygame.event.peek([MOUSEBUTTONDOWN,KEYBUTTONDOWN]:
#=1 wenn maus/taste betätigt wird
pygame.display.quit()
(3) ... und der dritte Fehler ist grundsätzlicher: Ein event muss in der Regel immer wiedern abgefragt werden, wobei es meistens ja gerade nicht eingetreten ist, manchmal aber eben doch. Dann kann darauf reagiert werden. Sowas macht man in einer Schleife. Ein einfacher Test in deinem Sinn, bei dem sich das Fenster nach drei Klicks oder Tasten schließt, könnte etwa so aussehen: import pygame from pygame.constants import * pygame.init() screen = pygame.display.set_mode((400, 300)) pygame.display.set_caption("Kathleen's Test") klicks = 0 while 1: # für immer ... if pygame.event.get([MOUSEBUTTONDOWN,KEYDOWN]): klicks = klicks + 1 print "Ups", klicks if klicks == 3: # ... d. h. bis hierher break Nicht gerade das Gelbe vom Ei, aber hoffentlich ausreichend um zu erklären, wie es geht. Eine sehr gute Idee ist übrigens, das Chimp-Tutorial von der Pygame-Website zu lesen. "ChimpsLineByLine" ... Sollte nach der Installation von Pygame auch auf deinem Computer zu finden sein: im Ordner (Python22)\Pygame-Docs\docs\tut
weiterhin würde mich auch interessieren, ob man Tkinter und pygame gleichzeitig verwenden könnte.
Ich *weiß* das nicht, aber es würde mich *sehr* wundern, da sich verschiedene Grafik-Bibliotheken in Python meiner Erfahrung nach fast nie vertragen.
Es wäre ja ganz praktisch, nur die zu animierenden Objekte mit pygame zu bearbeiten und dann in ein tkinter-fenster einzufügen. Oder gibt es vielleicht ein mit pygame vergleichbares Modul?
Mit Tkinter alleine lassen sich auch ganz nette Animationen machen. Ob es für dich ausreicht, weiß ich natürlich nicht, weil ich ja nicht weiß, was du vor hast. Ein Beispiel schicke ich dir als attachment: eine Animation der "Türme von Hanoi". Das Beispiel ist aus dem gerade erschienen Buch "Python für Kids", wo auch genau erklärt wird, *wie* man sowas mit Tkinter macht. ("Bonuskapitel 4, auf der CD") Wenn du Python installiert hast, einfach mit python hanoig.py starten. Das Buch ist übrigens für Schüler/innen und Lehrer/innen gedacht, ob sie nun am Albert Schweitzer Gymnasium in Erfurt oder an der Theresianischen Akademie in Wien oder an irgend einer anderen Schule sind ... Ein bisschen Interesse für Formales (Mathe, Chemie, Informatik ...) ist gut, aber keineswegs Voraussetzung. Weil es nämlich ohnehin durch das Buch geweckt wird ;-) Liebe Grüße Gregor
Danke für die Hilfe
Kathleen
### Python für Kids - Kapitel B4 ### # Autor: Gregor Lingl # Datum: 29. 9. 2002 # hanoig.py from Tkinter import Tk, Canvas from Canvas import Rectangle # from scheibe import Scheibe usingIDLE = 0 class Scheibe(Rectangle): "Bewegliches Rechteck auf einem Tkinter-Canvas" def __init__(self,cv,pos,laenge,hoehe): x0, y0 = pos x1, x2 = x0-laenge/2.0, x0+laenge/2.0 y1, y2 = y0-hoehe, y0 Rectangle.__init__(self,cv,x1,y1,x2,y2, fill = "red") def bewege_nach(self, x, y): from math import sqrt x1,y1,x2,y2 = self.coords() x0, y0 = (x1 + x2)/2, y2 dx, dy = x-x0, y-y0 d = sqrt(dx**2+dy**2) schritte = int(d/10) + 1 dx, dy = dx/schritte, dy/schritte for i in range(schritte): self.move(dx,dy) self.canvas.update() self.canvas.after(20) class Turm(list): def __init__(self, x, y, h): self.x = x self.y = y self.h = h def top(self): return self.x, self.y - len(self)*self.h def hanoi(n,von,nach,hilf): if n==1: move(von,nach) else: hanoi(n-1,von,hilf,nach) hanoi(1,von,nach,hilf) hanoi(n-1,hilf,nach,von) def move(von_turm, nach_turm): scheibe = von_turm.pop() x1, y1 = von_turm.top() x2, y2 = nach_turm.top() scheibe.bewege_nach(x1,20) scheibe.bewege_nach(x2,20) scheibe.bewege_nach(x2,y2) nach_turm.append(scheibe) def hanoispiel(n): """Führt ein Hanoi-Spiel mit n Scheiben aus:""" root = Tk() # ein Fenster root.title("TÃŒrme von Hanoi") # mit Titel, cv = Canvas(root,width=440,height=210) # eine Leinwand - cv.pack() # - aufspannen pflock1 = Rectangle(cv, 75, 40, 85,190,fill='blue') pflock2 = Rectangle(cv,215, 40,225,190,fill='blue') pflock3 = Rectangle(cv,355, 40,365,190,fill='blue') boden = Rectangle(cv, 5,190,435,200,fill='black') turm_a = Turm( 80, 190, 15) turm_b = Turm(220, 190, 15) turm_c = Turm(360, 190, 15) for i in range(n): # turm_a aufbauen laengen_differenz = 100 // n laenge = 120 - i * laengen_differenz s = Scheibe( cv, turm_a.top(), laenge, 13) turm_a.append(s) hanoi(n, turm_a, turm_b, turm_c) if not usingIDLE: root.mainloop() if __name__ == '__main__': hanoispiel(7)

Hallo Gregor, in Zeile 78 fand sich noch ein kleiner Fehler und ich hab das Programm so verändert, daß es auch mit Pythonversionen vor 2.2 läuft, unter z.B. Debian Linus ist noch 2.1 standart bei Python Gruß Dookie P.S.: Echt nettes Beispiel ### Python für Kids - Kapitel B4 ### # Autor: Gregor Lingl # Datum: 29. 9. 2002 # hanoig.py from sys import version_info if version_info <= (2,2): # check for version < 2.2 from UserList import UserList as list from Tkinter import Tk, Canvas from Canvas import Rectangle # from scheibe import Scheibe usingIDLE = 0 class Scheibe(Rectangle): "Bewegliches Rechteck auf einem Tkinter-Canvas" def __init__(self,cv,pos,laenge,hoehe): x0, y0 = pos x1, x2 = x0-laenge/2.0, x0+laenge/2.0 y1, y2 = y0-hoehe, y0 Rectangle.__init__(self,cv,x1,y1,x2,y2, fill = "red") def bewege_nach(self, x, y): from math import sqrt x1,y1,x2,y2 = self.coords() x0, y0 = (x1 + x2)/2, y2 dx, dy = x-x0, y-y0 d = sqrt(dx**2+dy**2) schritte = int(d/10) + 1 dx, dy = dx/schritte, dy/schritte for i in range(schritte): self.move(dx,dy) self.canvas.update() self.canvas.after(20) class Turm(list): def __init__(self, x, y, h): if version_info <= (2,2): self.data = [] self.x = x self.y = y self.h = h def top(self): return self.x, self.y - len(self)*self.h def hanoi(n,von,nach,hilf): if n==1: move(von,nach) else: hanoi(n-1,von,hilf,nach) hanoi(1,von,nach,hilf) hanoi(n-1,hilf,nach,von) def move(von_turm, nach_turm): scheibe = von_turm.pop() x1, y1 = von_turm.top() x2, y2 = nach_turm.top() scheibe.bewege_nach(x1,20) scheibe.bewege_nach(x2,20) scheibe.bewege_nach(x2,y2) nach_turm.append(scheibe) def hanoispiel(n): """Führt ein Hanoi-Spiel mit n Scheiben aus:""" root = Tk() # ein Fenster root.title("Towers of Hanoi") # mit Titel, cv = Canvas(root,width=440,height=210) # eine Leinwand - cv.pack() # - aufspannen pflock1 = Rectangle(cv, 75, 40, 85,190,fill='blue') pflock2 = Rectangle(cv,215, 40,225,190,fill='blue') pflock3 = Rectangle(cv,355, 40,365,190,fill='blue') boden = Rectangle(cv, 5,190,435,200,fill='black') turm_a = Turm( 80, 190, 15) turm_b = Turm(220, 190, 15) turm_c = Turm(360, 190, 15) for i in range(n): # turm_a aufbauen laengen_differenz = 100 / n laenge = 120 - i * laengen_differenz s = Scheibe( cv, turm_a.top(), laenge, 13) turm_a.append(s) hanoi(n, turm_a, turm_b, turm_c) if not usingIDLE: root.mainloop() if __name__ == '__main__': hanoispiel(7) _______________________________________________ Python-de maillist - Python-de@starship.python.net http://starship.python.net/mailman/listinfo/python-de

Am Fri, 31 Jan 2003 01:00:22 +0100 Schrieb Fritz Cizmarov <fritz@sol.at>: die beiden
if version_info <= (2,2):
sollten natürlich if version_info < (2.2): sein. Gruß Fritz _______________________________________________ Python-de maillist - Python-de@starship.python.net http://starship.python.net/mailman/listinfo/python-de

Fritz Cizmarov schrieb:
Am Fri, 31 Jan 2003 01:00:22 +0100 Schrieb Fritz Cizmarov <fritz@sol.at>:
die beiden
if version_info <= (2,2):
sollten natürlich
if version_info < (2.2):
sein.
Dacht ichs doch! ;-) In der Tat ist aber jedes Fünfer-Tupel, das mit (2,2,...) beginnt echt größer als (2,2):
(2, 2, 0, 'final', 0) <= (2,2) 0
und somit läft das Programm ab 2.2.x wie gehabt. Nichtsdestotrotz zeigt die letzte korrigierte Fassung besser, um was es geht. Danke, jedenfalls. Gregor
Gruß
Fritz
_______________________________________________ Python-de maillist - Python-de@starship.python.net http://starship.python.net/mailman/listinfo/python-de
_______________________________________________ Python-de maillist - Python-de@starship.python.net http://starship.python.net/mailman/listinfo/python-de
participants (4)
-
Fritz Cizmarov
-
Gregor Lingl
-
Kathleen Dennler
-
Stefan Schwarzer