Pygame schließt sich selbst

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Popelvis
User
Beiträge: 2
Registriert: Dienstag 3. Juli 2018, 14:03

Dienstag 3. Juli 2018, 14:14

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
Benutzeravatar
__blackjack__
User
Beiträge: 1584
Registriert: Samstag 2. Juni 2018, 10:21

Dienstag 3. Juli 2018, 14:40

@Popelvis: Starte eine Eingabeaufforderung und ruf es von dort aus auf. Dann siehst Du auch die Fehlermeldung und damit den Grund warum es abbricht.

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
Benutzeravatar
ThomasL
User
Beiträge: 419
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Dienstag 3. Juli 2018, 14:52

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()
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
Popelvis
User
Beiträge: 2
Registriert: Dienstag 3. Juli 2018, 14:03

Dienstag 3. Juli 2018, 19:04

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
Antworten