Forum: PC-Programmierung PyGame, Animation steht still, wenn das Fenster verschoben wird


von Felix (Gast)


Lesenswert?

Hallo Forum,


ich habe eine Frage zu Python und Pygame, bei der es darum geht, dass 
die Animationen im Fenster still stehen, wenn das Fenster mit der Maus 
verschoben wird und auch, wenn man nur mit der Maus auf die 
Fensterleiste oben klickt.

Ein Beispiel, bei dem das bei mir passiert, ist das am Ende dieser 
Website:

https://nerdparadise.com/programming/pygame/part4

Kennt jemand den Grund dafür und wie eine Lösung aussehen könnte?


Danke schonmal.

von KWin (Gast)


Lesenswert?

Das ist keine Eigenschaft von Pygame, sondern von deinem Window-Manager, 
wie/ob dieser compositing einsetzt, und wie/ob das compositing von der 
Hardware unterstützt wird.

Bei mir laufen pygame-Animationen beim Verschieben weiter, das Fenster 
wird beim Verschieben Halbtransparent, hinter den Animationen scheint 
dann eben das Browser-Fenster durch:

Windowmanager Kwin, Compositing über OpenGL. PyGame rendert so in eine 
OpenGL-Textur, Darstellung, Transparenz, Verzerrungen (Schwabbelige 
Fenster beim Verschieben) usw. rechnet die Grafikkarte in Hardware. Ob 
sich die Textur dabei verändert, ist der Grafikkarte egal.

von Felix (Gast)


Lesenswert?

Danke schonmal für die Erklärung.

Dadurch habe ich eine weitere Frage:
Ist dieser WindowManager unter Windows für PyGame 
einstell-/installierbar oder ist das nur unter Linux/Unix möglich?

von ergo70 (Gast)


Lesenswert?

Könnte sein, dass event.get() blockiert, wenn Du das Fenster 
verschiebst. Überprüfe das mal, z.B. in dem Du in der for event Schleife 
was auf die Konsole schreibst. Wenn die Ausgaben auch anhalten, während 
Du das Fenster verschiebst, ist es das wohl.

von Felix (Gast)


Lesenswert?

Zu schade, keine Ausgaben aus der Eventloop während das Fenster 
verschoben wird :-(.

Kennt da jemand einen Workaround/Trick?

Danke wieder einmal.

von ergo70 (Gast)


Lesenswert?

Typischerweise trennt man den Teil der blockieren kann von dem, der 
nicht blockieren darf. Also z.B. in dem der Zeichenteil in einen eigenen 
Thread ausgelagert wird. Dann kann event.get() blockieren und die 
Animation läuft weiter. Wie das jetzt genau bei pygame gehandhabt wird, 
weiss ich allerdings nicht, da gibt es bestimmt Tutorials zu...

von Felix (Gast)


Lesenswert?

Leider fand ich nichtmal eine Beschreibung oder Grund für das Blockieren 
der Animation.

Ich werde dann aber mal ausprobieren, ob und wenn ja wie das Eventsystem 
vom Rest des Programms getrennt werden kann.

Danke in jedem Fall für die Hilfe.

von KWin (Gast)


Lesenswert?

Felix schrieb:
> unter Windows für PyGame

Ah, sorry. bin von Linux ausgegangen, da gibt's eine klare 
Arbeitsteilung... Die Applikation ist für ihren Fensterinhalt zuständig, 
für das ganze Aussenherum der Windowmanager.

Bei Windows ist das mehr vermischt, da muss sich eine Applikation selber 
verschieben, weswegen es gut sein kann, dass dabei eben keine 
Animationen weiterlaufen.
Ist vermutlich historisch so gewachsen, und um die Kompatibilität zu 
Windows 3.1 auf DOS zu wahren nie geändert worden.

Seit Vista gibts den "dwm.exe" der manche der Aufgaben übernimmt, die 
unter Unix dem windowmanager zufallen, aber das Fenster-Verschieben 
gehört glaube ich nicht dazu.

von Felix (Gast)


Lesenswert?

Ehrlich gesagt bin ich auch eher auf Linux aus. Aber eine 
Plattformunabhängigkeit kann auch nicht schaden. Daher hatte ich auf 
Win7 begonnen.

Nichtsdestotrotz ist es super, zu wissen, dass Linux hier wieder mal 
sehr umgänglich ist. Daher natürlich auch danke für diese Info :-).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.