Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: python pygame (sprite) knop  (gelezen 1035 keer)

python pygame (sprite) knop
« Gepost op: 2013/06/08, 10:52:25 »
ik ben de laatste tijd een beetje aan het klooien met python, voornamelijk met pygame.

maar nu loop ik tegen een probleem aan met een 'knop' te maken (gewoon een klikbare sprite),

python zelf geeft geen errors maar de knop doet het ook niet,

Citaat
      for event in pygame.event.get():
               if event.type == MOUSEBUTTONDOWN:
                  if event.key == 1:
                     for object in blauwe_knop:
                        sys.exit

Citaat
blauwe_knop = pygame.image.load('buttons/blauw.png')

Citaat
screen.blit(blauwe_knop, (0 ,0))

heeft iemand hier een oplossing voor? :)

Re: python pygame (sprite) knop
« Reactie #1 Gepost op: 2013/06/08, 13:41:03 »
ik heb
Citaat
if event.key == 1:
vervangen met
Citaat
if event.button == 1:

nu crasht ie met de error
Citaat
Traceback (most recent call last):
  File "./pcstats.py", line 46, in <module>
    for object in blauwe_knop:
TypeError: 'pygame.Surface' object is not iterable

Re: python pygame (sprite) knop
« Reactie #2 Gepost op: 2013/06/08, 13:59:20 »
"blauwe_knop" is een pygame.Surface object dat blijkbaar geen iterator is. Het lijkt mij ook niet logisch om een for-loop te gebruiken op een enkel afbeelding object.

Ik ken Pygame niet echt, maar volgens mij mist er nog een stuk code. Moet er niet getest worden of de mouse event gebeurt op de knop?

De controle kan ook nog op 1 regel gezet worden:
if event.type == MOUSEBUTTONDOWN and event.button == 1:sys.exit is ook verkeerd. Dit moet sowieso sys.exit() zijn, maar dan nog is dit waarschijnlijk niet de correcte manier. Pygame moet ergens een API hebben om aan te roepen bij het afsluiten.

Re: python pygame (sprite) knop
« Reactie #3 Gepost op: 2013/06/08, 14:24:54 »
sys.exit moet indd sys.exit() zijn , ik weet niet of dit wel of geen goeie manier is maar met sys.exit() sluit hij het programma inieder geval af en geeft geen errors, dat is voor mij al voldoende.

daarbij heb ik de for-loop weg gehaalt en het gehele stuk vast geplakt aan de main loop en de event.type en event.button op een regel gezet,
dit ziet er nu zo uit:

Citaat
while True:
   for event in pygame.event.get():
      if event.type == QUIT:
         sys.exit()
      elif event.type == KEYDOWN:
         if event.key == K_ESCAPE:
            sys.exit()
                elif event.type == MOUSEBUTTONDOWN and event.button == 1:
                        for object in blauwe_knop:
                                sys.exit()

maar nogsteets zit er iets iet goed met de for object in blauwe_knop

Re: python pygame (sprite) knop
« Reactie #4 Gepost op: 2013/06/08, 14:53:30 »
De for-loop zit er nog steeds in, maakt niet uit waar ge die zet, het zal nooit werken. Ge moet ergens een manier vinden om te zien of de mouseclick event wel op de knop plaatsvind. Ik zie dat pygame.Rect een method heeft daarvoor: http://www.pygame.org/docs/ref/rect.html#pygame.Rect.collidepoint
pygame.Surface.blit() geeft een pygame.Rect terug, dus deze kan daarvoor gebruikt worden. Het hangt er blijkbaar vanaf welke manier ge gebruikt om de afbeelding te tonen.

Let ook op de insprong van de code, in Python heel belangrijk. De code in uw laatste bericht klopt niet en zal niet werken.

Re: python pygame (sprite) knop
« Reactie #5 Gepost op: 2013/06/08, 14:58:27 »
python kan heel kinderachtig doen met verkeerd geplaatste tabs etc.. daar ben ik van op de hoogte,

bedankt voor de link , ik zal es gaan puzzelen met Rect.