Abfrage ob Mausbutton konstant gedrückt ist

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Sonnenblume
User
Beiträge: 7
Registriert: Sonntag 20. Juli 2008, 11:42

Hallo,

ich versuche eine Funktion zu programmieren in der abgefragt wird, ob eine Maustaste konstant gedrückt wird. Während die Taste gedrückt wird soll dann etwas passieren (z.B. etwas gezeichnet werden).
Ich habe es über eine while Schleife versucht, aber da stürzt alles ab. Für irgendwelche Ideen wäre ich dankbar
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Wenn du uns deinen Code zeigst, dann wüssten wir auch, wie du es versucht hast ...
BlackJack

Interessant wäre auch *womit*. Das ist hier ja das "Sammelbecken" für alle GUI-Toolkits, die kein eigenes Unterforum haben.
Sonnenblume
User
Beiträge: 7
Registriert: Sonntag 20. Juli 2008, 11:42

Sorry, es geht um Pygame:

Code: Alles auswählen

while True:
for event in pygame.event.get():
if event.type == MOUSEBUTTONDOWN:
paint()

def paint():
while MOUSEBUTTONDOWN == True:
mach irgendwas
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Also ein lauffähiges Codesnippet wäre zu begrüßen, statt irgendeinem - nicht einmal eingerückten - Brocken.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Sonnenblume
User
Beiträge: 7
Registriert: Sonntag 20. Juli 2008, 11:42

Ich hoffe dass das so okay ist:

Code: Alles auswählen

import pygame

from pygame.locals import *
from sys import exit

pygame.init()
screen = pygame.display.set_mode((640, 480), 0 ,32)
startpos = ()	
endpos = ()
momentpos = ()

while True:
	for event in pygame.event.get():
		if event.type == QUIT:
			exit()
		if event.type == MOUSEBUTTONDOWN:
			startpos = pygame.mouse.get_pos() 
			paint()

def paint():
	endpos = startpos
	momentpos = startpos
	while MOUSEBUTTONDOWN == True:
		endpos = pygame.mouse.get_pos()
			if endpos != momentpos:
				pygame.draw.rect(screen,(255,255,255), Rect(startpos, endpos))
				momentpos = endpos
				
screen.fill((0,0,0))

pygame.display.update()
BlackJack

Ist nicht okay, gibt einen `IndentationError`:

Code: Alles auswählen

bj@s8n:~$ python forum2.py
  File "forum2.py", line 26
    if endpos != momentpos:
    ^
IndentationError: unexpected indent
Wenn man den behebt gibt es einen `NameError` weil Du `paint()` verwendest bevor es definiert ist.

Wenn man das behebt, dann tut das Programm im Grunde gar nichts weil die Bedingung der ``while``-Schleife in `paint()` *grundsätzlich* nicht erfüllt wird. Überleg Dir mal was Du da miteinander vergleichst und warum das nie gleich sein wird.

An dem Quelltext kann man aber auch nicht viel reparieren, weil das Konzept an sich fragwürdig ist. Du solltest Dir beim `MOUSEBUTTONDOWN`-Ereignis die Mausposition merken und beim `MOUSEBUTTONUP`-Ereignis dann zeichnen. Ausserdem sollte alles in Funktionen und/oder Objekten verschwinden.

Namen die mit "Nichts" belegt sind, bindet man normalerweise an `None` und nicht an ein leeres Tupel. Aber wie schon gesagt die ganzen Objekte auf Modulebene sollten sowieso nicht da sein.
Antworten