Seite 1 von 1

Abfrage ob Mausbutton konstant gedrückt ist

Verfasst: Samstag 23. August 2008, 10:03
von Sonnenblume
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

Verfasst: Samstag 23. August 2008, 10:20
von numerix
Wenn du uns deinen Code zeigst, dann wüssten wir auch, wie du es versucht hast ...

Verfasst: Samstag 23. August 2008, 11:04
von BlackJack
Interessant wäre auch *womit*. Das ist hier ja das "Sammelbecken" für alle GUI-Toolkits, die kein eigenes Unterforum haben.

Verfasst: Samstag 23. August 2008, 11:17
von Sonnenblume
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

Verfasst: Samstag 23. August 2008, 11:33
von Leonidas
Also ein lauffähiges Codesnippet wäre zu begrüßen, statt irgendeinem - nicht einmal eingerückten - Brocken.

Verfasst: Samstag 23. August 2008, 12:17
von Sonnenblume
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()

Verfasst: Samstag 23. August 2008, 12:55
von 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.