Seite 1 von 1

Mein Button Funktioniert nicht so wie ich es haben will.

Verfasst: Dienstag 2. Juni 2015, 15:16
von N4SONIC
Hallo,

Ich habe ein Button wenn ich drauf klicke soll die Nachricht "Test" nur einmal erscheinen. Aber bei mir ist es so das wenn ich auf denn Button klicke das die Nachricht "Test" gespamt kommt :/

Was habe ich falsch gemacht ?

Code: Alles auswählen

import pygame

black = (0,0,0)

class Design:
	def __init__(self):
		self.button_1 = pygame.Rect(400,300,100,50)

	def render(self,window):
		pygame.draw.rect(window,black,(self.button_1))

		mouse_click = pygame.mouse.get_pressed()
		mouse_pos = pygame.mouse.get_pos()

		if mouse_click[0] and self.button_1.collidepoint(mouse_pos):
			print("Test")

design = Design()

pygame.init()

window = pygame.display.set_mode((800,600))

pygame.display.set_caption("Window")

clock = pygame.time.Clock()

running = True
while running:

    for event in pygame.event.get():

        if event.type==pygame.QUIT:

            running = False

    window.fill((255,255,255))

    design.render(window)

    clock.tick(60)
    pygame.display.flip()

pygame.quit()

Re: Mein Button Funktioniert nicht so wie ich es haben will.

Verfasst: Dienstag 2. Juni 2015, 15:27
von Sirius3
Du fragst ja auch ab, ob die Maustaste gedrückt ist (get_pressed) und das ist sie eben eine ganze Zeit lang, und so lange kommen auch Deine "Test"s.

Re: Mein Button Funktioniert nicht so wie ich es haben will.

Verfasst: Dienstag 2. Juni 2015, 15:29
von BlackJack
@N4SONIC: Warum hättest Du denn jetzt gedacht das sich der Code anders verhält? `pygame.mouse.get_pressed()` gibt den aktuellen Zustand der Maustasten wieder, das heisst solange die Maustaste gedrückt ist, ist auch die (Teil)Bedingung wahr, und `render()` rufst Du regelmässig auf. Also wird auch bei jedem Aufruf der Text ausgegeben.

An der Stelle sollte man besser mit den Ereignissen von Pygame arbeiten und nicht die Maustasten (und Position) selber periodisch abfragen.

Re: Mein Button Funktioniert nicht so wie ich es haben will.

Verfasst: Dienstag 2. Juni 2015, 15:33
von N4SONIC
@BlackJack: Danke für die Antwort :) Ich bin ein Anfänger und weiß nicht wie ich das machen soll könntest du ein Example machen ?

Re: Mein Button Funktioniert nicht so wie ich es haben will.

Verfasst: Dienstag 2. Juni 2015, 15:42
von BlackJack
@N4SONIC: Du hast doch schon eine Schleife für Ereignisse in der Du auf `QUIT` reagierst. Da gibt es noch einen Haufen anderer Ereignisse, zum Beispiel 'MOUSEBUTTONDOWN' und das Ereignisobjekt hat die Position und die Nummer der betroffenen Maustaste als Attribute. Details siehe: http://www.pygame.org/docs/ref/event.html

Re: Mein Button Funktioniert nicht so wie ich es haben will.

Verfasst: Dienstag 2. Juni 2015, 16:24
von N4SONIC
@BlackJack: Danke du hast mir geholfen es Funktioniert :)

Code: Alles auswählen

running = True
while running:

    for event in pygame.event.get():

        if event.type==pygame.QUIT:

            running = False

        mouse_pos = pygame.mouse.get_pos()

        if event.type == pygame.MOUSEBUTTONDOWN:
        	if design.button_1.collidepoint(mouse_pos):
        		print("Test")

    window.fill((255,255,255))

    design.render(window)

    clock.tick(60)
    pygame.display.flip()

pygame.quit()

Re: Mein Button Funktioniert nicht so wie ich es haben will.

Verfasst: Dienstag 2. Juni 2015, 16:44
von BlackJack
@N4SONIC: Wobei das jetzt ein nicht so schöner OOP-Entwurf ist das die Hauptschleife diesen Test macht und so weit in das `Design`-Objekt eingreift.