Python-button überlappen wie behebe ich dass, wenn ich auf back clicke das Game gequittet wird?

1 Antwort

Am besten wäre es wohl, wenn die Buttons reagieren sobald dre Button losgelassen wird. Dann passiert, solange der Button gedrückt wird, nichts und es können auch keine automatischen Buttonklicks passieren wenn du das eine Menü durch das andere ersetzt.

Ansonsten kannst du evtl. beim Menüwechsel ein Timeout einbauen oder so etwas.


JayJAy361 
Beitragsersteller
 08.06.2024, 15:41

Oh ok. Danke für den Tipp. Könntest du mir ein Tutorial dazu verlinken , oder schreiben, wie ich das Programmieren muss. Ich bin noch nicht sehr lange am Programmieren und kenn mich halt leider noch nicht sehr gut aus.

0
Destranix  08.06.2024, 15:44
@JayJAy361

Teste auf den Mausklick und das Mausloslassen und schau, dass du nur etwas tust, wenn beide auf demselben Element stattfanden und nicht zu viel Zeit dazwischen lag.

0
JayJAy361 
Beitragsersteller
 08.06.2024, 15:49
@Destranix

Ja, ok, aber wie Programmier ich das? Ich hatte den Code jetzt aus 1-2 Tutorials rausgeschrieben und versucht zu verstehen zum Lernen. Und in dem halben Jahr Informatikunterricht hatten wir das noch nicht behandelt.

0
Destranix  08.06.2024, 15:52
@JayJAy361

Mach erst einmal das, mit demselben Element.

Lagere das Mausover-Zeug in eine eigene Klasse aus. Das du quasi ein Objekt hast, das bei einer mausbewegung prüft, ob die maus irgendwo drüberbewegt wurde oder wo die gerade drüber ist und so.
In der Klasse kannst du dann auch speichern, auf welches Element geklickt wurde und auf welchem die Maus losgelassenw urde und so.

Das kannst du evtl. so aufbauen, wie es auch in javascript ist, mit den Events.

0
Destranix  08.06.2024, 15:59
@JayJAy361

Was du dann machen kannst ist, für ein Objekt Events zu registrieren. Die Maus-Klasse hat eie Methode, mit der du für vorgegebene Events auf Objekten Events registrieren kannst. Du sagst beispielsweise "onmouseover" für Objekt "Button 1", führe die methode aus, die ich dir als Parameter übergebe.

Wenn jetzt die Maus ihren Zustand verändert, dann schuast du, ob Listener für die Zustandsänderung existieren. Dann schaust du, welche Elemente betroffen sind von der Zustandsänderung.
Wenn ein Event registriert wurde für die Zustandsänderung, dann führst du die Funktion aus, die du erhalten hast bei der Registrierung des Events.

0
JayJAy361 
Beitragsersteller
 08.06.2024, 16:04
@Destranix

Naja Javascript hab ich noch nie verwendet. Und wie bereits gesagt hab ich leider keinen plan, wie ich das als code schreiben soll, tut mir leid und danke für deine Bemühungen.

0
Destranix  08.06.2024, 16:10
@JayJAy361

Nun, an sich gibt es soetwas auch fertig als API. Evtl. sogar schon eingebaut in Pygame.

Evtl. kannst du aber auch erst einmal einfach anfangen, wenn du es selber bauen willst, und dich Schritt für Schritt vorarbeiten:

1.) Schreibe eine Klasse, die das element, über dem die Maus gerade ist, hervorhebt. Das solltest du mit dem Code, den du bisher geschrieben hast, hinbekommen.

2.) Wenn du das hast, dann kannst du das Element in eine Klassenvariable speichern.

3.) Dasselbe machst du jetzt für Mausklicks und Mausloslassen. Du veränderst das Element, das angeklickt wird oder das losgelassen wird.

4.) Du speicherst dir das Element, das angeklickt wird, in eine Variable ab.

5.) Auch noch hilfreich ist es, zu registrieren, wenn die maus sich gerade auf ein Objekt bewegt oder dieses verlässt. Das kannst du auch implementieren.

6.) Wenn du das hast, ist das wesentliche bereits getan. Dann kannst du die Events registrieren und die betroffenen Elemente identifizieren.
Das mit dem Registrieren von Funktionen kannst brauchst du nicht unbedingt, aber wenn dich das interessiert, kann ich dir dabei dann auch noch weiterhelfen.

0
JayJAy361 
Beitragsersteller
 08.06.2024, 16:14
@Destranix

ich muss jetzt leider erstmal los, und kann morgen Abend erst nochmal richtig reinschauen, aber schon mal vielen Dank für deine Hilfe.

LG

1
Destranix  08.06.2024, 16:15
@Destranix
hervorhebt

Oder auf der Konsole ausgibt oder so etwas. Halt irgendetwas, dass du ein Feedback hast.

0