Die Maus einfangen

Fragen zu Tkinter.
Antworten
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Freitag 23. Februar 2007, 01:15

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?
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

Freitag 23. Februar 2007, 11:39

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
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Freitag 23. Februar 2007, 12:36

:shock: Wow... eine fast fertige Loesung... vielen Dank :)
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

Freitag 23. Februar 2007, 17:38

nkoehring hat geschrieben:.. eine fast fertige Loesung...

sprich dich ruhig aus - was fehlt noch? :)
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Freitag 23. Februar 2007, 19:47

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 ;)
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Freitag 23. Februar 2007, 23:06

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
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Freitag 23. Februar 2007, 23:59

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 ;)
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Antworten