Abfrage ob Mausbutton konstant gedrückt ist

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

Abfrage ob Mausbutton konstant gedrückt ist

Beitragvon Sonnenblume » Samstag 23. August 2008, 10:03

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

Beitragvon numerix » Samstag 23. August 2008, 10:20

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

Beitragvon BlackJack » Samstag 23. August 2008, 11:04

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

Beitragvon Sonnenblume » Samstag 23. August 2008, 11:17

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 23. August 2008, 11:33

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 Modvoice
Sonnenblume
User
Beiträge: 7
Registriert: Sonntag 20. Juli 2008, 11:42

Beitragvon Sonnenblume » Samstag 23. August 2008, 12:17

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

Beitragvon BlackJack » Samstag 23. August 2008, 12:55

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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder