Seite 1 von 1

Die Maus einfangen

Verfasst: Freitag 23. Februar 2007, 01:15
von nkoehring
Hallo...

ich hab mir heute mal Tkinter angeschaut, weil ich gern ein kleines Fenster haben wuerde, dass meine Mausbewegungen analysiert.
Also das soll ungefaehr so aussehen, dass ich entweder die Maus ins Fenster einfange oder einfach grab_set_global() verwende.

Nun moechte ich aber auch die Bewegungen verfolgen koennen. Wie stell ich das an? Bisher weiß ich nur wie ich Klicks orten kann. Irgendwie moechte ich gern die kompletten Mausbewegungen aufzeichnen, bzw die Verhaeltnisse zu den letzten Bewegungen (Bewege ich die Maus schnell hin- und her? Mache ich Kreise? Whatever) ...aehnlich als wuerde ich Mouse-Gestures realisieren wollen.

Kann mir da wer helfen?

Verfasst: Freitag 23. Februar 2007, 11:39
von pyStyler
Hi,
hier bitte!

Code: Alles auswählen

from Tkinter import *

class Maus( Frame ):
	def __init__( self, master):
		Frame.__init__( self, master)
		self.pack( expand = YES, fill = BOTH )
		self.stringvar = StringVar() 
	
		L= Label(self, textvariable=self.stringvar)
		L.pack(side=BOTTOM )
		
		self.bind("<B1-Motion>", self.callback)
	def callback(self, event ):
	      self.stringvar.set(str(event.x ) +', '+ str( event.y ))

def _main():
	root = Tk()
	root.geometry('600x400')
	app = Maus( root)
	root.mainloop()

if __name__ == "__main__":
	_main()
Gruss
pyStyler

Verfasst: Freitag 23. Februar 2007, 12:36
von nkoehring
:shock: Wow... eine fast fertige Loesung... vielen Dank :)

Verfasst: Freitag 23. Februar 2007, 17:38
von pyStyler
nkoehring hat geschrieben:.. eine fast fertige Loesung...

sprich dich ruhig aus - was fehlt noch? :)

Verfasst: Freitag 23. Februar 2007, 19:47
von nkoehring
Das ist bisher mein Code... der macht nix anderes als mir die aktuelle Position der Maus anzuzeigen.

Code: Alles auswählen

from Tkinter import *


_geometry = '640x480'

class Maus(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.pack(expand=YES, fill=BOTH)
        self.stringvar = StringVar()
        Label(self, textvariable=self.stringvar).pack(side=BOTTOM)
        self.bind("<Motion>", self.callback)

    def callback(self, event):
        self.stringvar.set(str(event.x)+':'+str(event.y))
        event.widget.update_idletasks()


if __name__ == "__main__":
    root = Tk()
    root.geometry(_geometry)
    app = Maus(root)
    root.mainloop()
Aber wie ich das jetzt analysisieren soll (also die "Art" der Mausbewegungen... hektisch, ruhig, schnell aber gezielt?), weis ich noch nicht, denn das ist der eigentliche plan ;)

Verfasst: Freitag 23. Februar 2007, 23:06
von HWK
Du solltest zusätzlich die Zeit speichern. Aus dieser und der zurückgelegten Strecke kannst du dann die Geschwindigkeit und evtl. auch die Beschleunigung berechnen. Ob hierfür time.time(), das scheinbar nur auf 1/100 Sekunden genau ist, ausreicht, müsste man ausprobieren.
Übrigens: Um Namenskonflikte zu vermeiden, sollte man den Unterstrich hinten anfügen. Vorne angefügt dient er als weak "internal use" indicator. Deshalb wohl eher: geometry_.
MfG
HWK

Verfasst: Freitag 23. Februar 2007, 23:59
von nkoehring
HWK hat geschrieben:Du solltest zusätzlich die Zeit speichern. Aus dieser und der zurückgelegten Strecke kannst du dann die Geschwindigkeit und evtl. auch die Beschleunigung berechnen. Ob hierfür time.time(), das scheinbar nur auf 1/100 Sekunden genau ist, ausreicht, müsste man ausprobieren.
Ja mit dem Gedanken spiele ich auch... ich muss nur noch irgendwie ...ehm... klar drueber werden, wie ich daraus dann nuetzliche Informationen zaubere :roll:
HWK hat geschrieben:Übrigens: Um Namenskonflikte zu vermeiden, sollte man den Unterstrich hinten anfügen. Vorne angefügt dient er als weak "internal use" indicator. Deshalb wohl eher: geometry_.
MfG
HWK
Ja danke fuer den Hinweis, aber die Bezeichnung ist schon so beabsichtigt ;)