Seite 1 von 1

Pygame schließt sich selbst

Verfasst: Dienstag 3. Juli 2018, 14:14
von Popelvis
Hallo,
Ich bin noch recht neu in Sachen Python-Programmierung. Momentan scheitere ich allerdings am Versuch ein erstes Fenster mit pygame zu bauen. Es schließt sich sofort wieder.
Ich verstehe nicht warum sich das script immer sofort schließt, obwohl es doch eigentlich in der Schleife hängen müsste. Auch mein Versuch mit einem am Ende angehängten input() hatte keinen Erfolg.

Code: Alles auswählen

#!/opt/bin/python3
import pygame, time, sys
from pygame.locals import *

(B,H) = (500,300)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)

pygame.init()
surf = pygame.display.set_mode((B,H), 0, 32)
pygame.display.set_caption('Stundenplan')
surf.fill(WHITE)


pygame.display_update()

while 1:
  event = pygame.event.wait()
  if event.type == KEYDOWN or event.type == QUIT:
    pygame.quit()
	sys.exit()
  time.sleep(0.05)
Ich nutzte python 3 unter Windows 7.


Vielen Dank im Vorraus!
Popelvis

Re: Pygame schließt sich selbst

Verfasst: Dienstag 3. Juli 2018, 14:40
von __blackjack__
@Popelvis: Starte eine Eingabeaufforderung und ruf es von dort aus auf. Dann siehst Du auch die Fehlermeldung und damit den Grund warum es abbricht.

Re: Pygame schließt sich selbst

Verfasst: Dienstag 3. Juli 2018, 14:52
von ThomasL
Hi Popelvis,
- display update wird anders geschrieben
- die Event-Behandlung in der while-Schleife ist nicht optimal.
ich bin so frei und füge eine Schleife anbei, die dir als Grundgerüst dienen kann.
Etliche Eventmöglichkeiten sind schon erfasst, einige auskommentiert.
Die Escape-Taste und ein Klick auf Fensterschliessen beenden das Programm,
drücken der p-Taste pausiert den Code da wo die Aktion abgeht...
Viel Spass.

Code: Alles auswählen

import pygame, time, sys
from pygame.locals import *

WIDTH, HEIGHT = 500, 300
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)

pygame.init()
surf = pygame.display.set_mode((WIDTH, HEIGHT), 0, 32)
pygame.display.set_caption('Stundenplan')
surf.fill(WHITE)

pause = False
run_loop = True

while run_loop:
    for event in pygame.event.get():
        if event.type == MOUSEMOTION:
            continue
        if event.type == QUIT:
            run_loop = False
            pause = True
            break
        if event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                run_loop = False
                pause = True
                break
            if event.key == K_p:
                pause = not pause   # pause the action
            # if event.key == K_b:
            #     pass
            # if event.key == K_UP or event.key == K_w:
            #     pass
            # if event.key == K_DOWN or event.key == K_s:
            #     pass
            # if event.key == K_LEFT or event.key == K_a:
            #     pass
            # if event.key == K_RIGHT or event.key == K_d:
            #     pass
            # if event.key == K_f:
            #     pass
            # if event.key == K_g:
            #     pass
            # if event.key == K_n:
            #     pass
            # if event.key == K_o:
            #     pass
            # if event.key == K_c:
            #     pass
            # if event.key == K_SPACE:
            #     pass

        # elif event.type == pygame.KEYUP:
        #     pass
        #
        # elif event.type == MOUSEBUTTONDOWN:
        # if event.button == 1:   # left mouse button
        #     pass
        # if event.button == 2:   # middle mouse button
        #     pass
        # if event.button == 3:  # right mouse button
        #     pass
        # if event.button == 4:  # mouse scroll up
        #     pass
        # if event.button == 5:  # mouse scroll down
        #     pass

        # elif event.type == MOUSEBUTTONUP:
        #     if event.button == 1:   # left mouse button
        #         pass
        #     if event.button == 2:   # middle mouse button
        #         pass
        #     if event.button == 3:  # right mouse button
        #         pass
        #     if event.button == 4:  # mouse scroll up
        #         pass
        #     if event.button == 5:  # mouse scroll down
        #         pass

    # mouse_pos = pygame.mouse.get_pos()

    # if pygame.key.get_mods() & KMOD_SHIFT and pygame.mouse.get_pressed()[0]:
    #     # shift key and left mouse button is pressed simultaneously
    #     pass

    if not pause:
        # hier kann dann die Aktion abgehen
        pygame.display.update()

Re: Pygame schließt sich selbst

Verfasst: Dienstag 3. Juli 2018, 19:04
von Popelvis
Danke euch beiden!
Den Tippfehler habe ich garnicht bemerkt!
Das mit der schlechten Event-Behandlung werde ich vielleicht mal bei dem Verlag anmerken, von dem ich das "Skript" habe

Re: Pygame schließt sich selbst

Verfasst: Samstag 3. April 2021, 17:25
von zaib
Hallo,
erst einmal vielen Dank für den Code von ThomasL. Endlich bleibt das Pygamefenster geöffnet. Trotzdem eine Frage:
Wenn ich irgendeine Aktion in den dafür vorgegebenen Bereich einfüge schließt das Fenster sofort.

import pygame, time, sys
from pygame.locals import *

WIDTH, HEIGHT = 500, 300
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)

pygame.init()
surf = pygame.display.set_mode((WIDTH, HEIGHT), 0, 32)
pygame.display.set_caption('Haalllooo')
surf.fill(WHITE)

pause = False
run_loop = True

while run_loop:
for event in pygame.event.get():
if event.type == MOUSEMOTION:
continue
if event.type == QUIT:
run_loop = False
pause = True
break
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
run_loop = False
pause = True
break
if event.key == K_p:
pause = not pause # pause the action
# if event.key == K_b:
# pass
# if event.key == K_UP or event.key == K_w:
# pass
# if event.key == K_DOWN or event.key == K_s:
# pass
# if event.key == K_LEFT or event.key == K_a:
# pass
# if event.key == K_RIGHT or event.key == K_d:
# pass
# if event.key == K_f:
# pass
# if event.key == K_g:
# pass
# if event.key == K_n:
# pass
# if event.key == K_o:
# pass
# if event.key == K_c:
# pass
# if event.key == K_SPACE:
# pass

# elif event.type == pygame.KEYUP:
# pass
#
# elif event.type == MOUSEBUTTONDOWN:
# if event.button == 1: # left mouse button
# pass
# if event.button == 2: # middle mouse button
# pass
# if event.button == 3: # right mouse button
# pass
# if event.button == 4: # mouse scroll up
# pass
# if event.button == 5: # mouse scroll down
# pass

# elif event.type == MOUSEBUTTONUP:
# if event.button == 1: # left mouse button
# pass
# if event.button == 2: # middle mouse button
# pass
# if event.button == 3: # right mouse button
# pass
# if event.button == 4: # mouse scroll up
# pass
# if event.button == 5: # mouse scroll down
# pass

# mouse_pos = pygame.mouse.get_pos()

# if pygame.key.get_mods() & KMOD_SHIFT and pygame.mouse.get_pressed()[0]:
# # shift key and left mouse button is pressed simultaneously
# pass

if not pause:
pygame.draw.rect(surf, (255,255,0), (300,300,40,80))
# hier kann dann die Aktion abgehen
pygame.display.update()


Bitte um Hile!!! Vielen Dank im voraus....

Re: Pygame schließt sich selbst

Verfasst: Sonntag 4. April 2021, 16:40
von ThomasL
Hallo zaib,
bitte benutze im erweiterten Editor den Button </> und füge deinen Code zwischen die code Tags ein.
So kann man nicht erkennen, wo in deinem Code ein Fehler steckt, da die Einrückung komplett fehlt.

Re: Pygame schließt sich selbst

Verfasst: Sonntag 4. April 2021, 20:57
von Sirius3
Starte das Programm aus einem Konsolenfenster aus, dann siehst du auch die Fehlermeldung. Die Zeile pygame.draw.rect ist falsch eingerückt.

Code: Alles auswählen

    if not pause:
        pygame.draw.rect(surf, (255,255,0), (300,300,40,80))
        # hier kann dann die Aktion abgehen
        pygame.display.update()