2016-07-31 33 views
1

Ich versuche, ein Programm zu erstellen, das die Maus auf meiner Kivy-Anwendung steuern wird. Was ist der richtige Weg, um einen Anbieter zu erstellen und senden Sie die Standorte, die ich verschieben möchte und klicken Sie auf?Richtig erstellen ein Mausereignis mit Kivy

Antwort

1

Werfen Sie einen Blick auf das Aufzeichnungsmodul, kann sie beide Ereignisse aufzeichnen und sie auch abspielen

Hier ist ein kleines Beispiel: (Änderung RECORD auf False die Wiedergabe nach der Aufnahme ... sehen)

import kivy 
from kivy.uix.button import Button 
from kivy.app import App 
from kivy.input.recorder import Recorder 

rec = Recorder(filename='myrecorder.kvi', 
    record_attrs=['is_touch', 'sx', 'sy', 'angle', 'pressure'], 
    record_profile_mask=['pos', 'angle', 'pressure']) 


def funky(b): 
    print("Hello!!!") 

    if RECORD: 
    rec.record = False 
    else: 
    rec.play = False 
    exit(0) 

class MyApp(App): 
    def build(self): 
    if RECORD: 
     rec.record = True 
    else: 
     rec.play = True 
    return Button(text="hello", on_release=funky) 

if __name__ == '__main__': 
    RECORD = True # False for replay 
    MyApp().run() 

Nun können Sie die Datei myrecorder.kvi sehen:

#RECORDER1.0 
(1.1087048053741455, 'begin', 1, {'profile': ['pos'], 'sx': 0.65875, 'is_touch': True, 'sy': 0.51}) 
(1.1346497535705566, 'update', 1, {'profile': ['pos'], 'sx': 0.66, 'is_touch': True, 'sy': 0.51}) 
(1.1994667053222656, 'end', 1, {'profile': ['pos'], 'sx': 0.66, 'is_touch': True, 'sy': 0.51}) 

können Sie den Recorder Klasse auf viele andere Weisen verwenden, finden Sie die Dokumentation: https://kivy.org/docs/api-kivy.input.recorder.html

Sie können den Recorder in Funktion wickeln einen kleinen Helfer zu machen:

#not tested 
def click(x, y): 
    with open("clicker.kvi", 'w') as f: 
     f.write("""\#RECORDER1.0 
(0.1087048053741455, 'begin', 1, {{'profile': ['pos'], 'sx': {x}, 'is_touch': True, 'sy': {y}}}) 
(0.1346497535705566, 'update', 1, {{'profile': ['pos'], 'sx': {x}, 'is_touch': True, 'sy': {y}}}) 
(0.1994667053222656, 'end', 1, {{'profile': ['pos'], 'sx': {x}, 'is_touch': True, 'sy': {y}}})""".format(x=x, y=y)) 
    rec = Recorder(filename='clicker.kvi', 
        record_attrs=['is_touch', 'sx', 'sy', 'angle', 'pressure'], 
        record_profile_mask=['pos', 'angle', 'pressure']) 
    rec.play = True 
    #should call rec.play = False somewhere? 
+0

Danke für die Antwort, aber ich bin nicht auf der Suche Bewegungen wiederzugeben. Ich habe ein Modell, das ein Spiel spielt, das zufällig generiert wird, aber ich brauche das Modell, um die Maus bewegen und klicken zu können. Ich kann ein "Cursor" -Widget an die Positionen bewegen, an denen es sein sollte, aber ich verstehe die Dokumentation nicht, um tatsächlich ein Bewegungsereignis zu senden oder die Position zu berühren –

+0

@JacobKern siehe [Quellcode] (https: // github (http://www.microsoft.com/germany/member/kivy/kivy/blob/master/kivy/input/recorder.py) Es wird Ihnen helfen zu finden, was das Click/Touch Event auslöst. – KeyWeeUsr

+1

@KeyWeeUsr - Das wird nicht so einfach sein, der Rekorder ist ein Eingabe-Anbieter, so dass er seine eigenen Ereignisse generiert - nicht "feuern" Ereignisse zu anderen Anbietern. Ich habe mein Anwsser bearbeitet, um eine kleine Helferfunktion einzuschließen, die helfen könnte, das gewünschte Ergebnis zu erhalten –