2016-06-21 9 views
2

Ich habe versucht, Touchtracer Demo-Beispiel in meinen Code zu implementieren. Here is the original pageKivy Grabbing Touch ohne Verzögerung

Ich erkannte, dass die Verfolgung nur mit einer Verzögerung funktioniert aufgrund der notwendigen touch.grab (Selbst-) Ereignis (nachdem Sie die Taste gedrückt halten). Ich möchte jedoch die Spur ohne Verzögerung sehen, direkt nach dem ersten Zug. Gibt es einen Weg dies zu tun, ohne die Spurenbildung zu stören?

EDIT: Mit "Verzögerung" meine ich die Halteaktion, um die Verfolgung zu aktivieren. Derzeit ist ein Drücken + Halten erforderlich, um den Tracer zu starten. Ich möchte in der Lage sein, unterwegs zu verfolgen, ohne den "Halt".

EDIT2: Ich hatte das Bedürfnis zu erklären, wie sich meine Version des Touchtracers von der anderer unterscheidet, weil niemand außer mir mit diesem Problem konfrontiert ist. Ich habe den Touchtracer-Code in meinen eingebettet und die vertikalen/horizontalen Linien und das Etikett entfernt. Meine Version hat also nur die Spur. Hier ist, was mein on_touch_down, on_touch_move und on_touch_up aussieht.

def on_touch_down(self, touch): 
    win = self.get_parent_window() 
    ud = touch.ud 
    ud['group'] = g = str(touch.uid) 
    pointsize = 5 
    ud['color'] = random() 

    with self.canvas: 
     Color(ud['color'], 1, 1, mode='hsv', group=g) 
     ud['lines'] = [ 
      Point(points=(touch.x, touch.y), source='particle.png', 
        pointsize=pointsize, group=g)] 
    touch.grab(self) 
    return True 

def on_touch_move(self, touch): 
    if touch.grab_current is not self: 
     return 
    ud = touch.ud 
    index = -1 
    while True: 
     try: 
      points = ud['lines'][index].points 
      oldx, oldy = points[-2], points[-1] 
      break 
     except: 
      index -= 1 

    if (oldx, oldy) == (touch.x, touch.y): 
     return 

    points = calculate_points(oldx, oldy, touch.x, touch.y) 

    if points: 
     try: 
      lp = ud['lines'][-1].add_point 
      for idx in range(0, len(points), 2): 
       lp(points[idx], points[idx + 1]) 
     except GraphicException: 
      pass 

def on_touch_up(self, touch): 
    if touch.grab_current is not self: 
     return 
    touch.ungrab(self) 
    ud = touch.ud 
    self.canvas.remove_group(ud['group']) 
+0

Dieses Beispiel wurde gerade heruntergeladen und es kann keine Verzögerung zwischen dem Zeichnen von Spuren und dem Drücken einer Maustaste auftreten. Verwendet kivy 1.9.2 dev mit Python 2.7 – jligeza

+0

Ich bin ziemlich sicher, dass dieses Beispiel keine nennenswerte Verzögerung einführen sollte. Tritt dasselbe in anderen Kivy-Apps auf und verschwindet es, wenn Sie den 'touch.grab'-Aufruf entfernen? – inclement

+0

Die Verzögerung, über die ich sprach, war die "Drücken und Halten" -Aktivierung des Tracers. Es funktioniert nicht, wenn ich den Zeiger mit der Linksklick-Aktion bewege. Ich benutze Python 2.7 und kivy 1.9.1 und ohne die Spur zu greifen funktioniert nicht. – potato

Antwort

1

Okay, es sah aus wie ein Versionsproblem mit einer der Bibliotheken. Ich habe das in Python2.7 verwendet, das auf Ubuntu 14.0 auf einer virtuellen Box aufbaut. Ich habe alles aktualisiert, was mit Python zu tun hat und kivy mit Bibliotheken neu installiert und das Problem ist behoben. Ich bin mir immer noch nicht sicher, was das verursacht hat, da ich keine Fehlermeldungen im Log bekommen habe, aber es sieht so aus, als wäre es auf einen Bug oder nicht richtig installierten Kivy zurückzuführen.

0

Ah, ich habe es jetzt! Sie möchten also auf Hover zeichnen - ohne den Knopf drücken zu müssen - wie html/css :hover, oder?

Da war ein Typ, der ein Verhalten dafür gemacht hat, aber that file (+ backup für den Fall, dass es verschwinden würde) ist LGPL, also bin ich mir nicht sicher, wie Sie es behandeln sollten. Allerdings bin ich mir sicher, dass eine Lizenz kann Ihnen nicht verbieten, eine grundlegende Operation die Rahmen können Sie tun zu tun, so ... nehmen Sie es auseinander und Sie sind gut zu gehen, denke ich.

+0

Nicht wirklich, ich möchte die Verfolgung verwenden, die über Klick aktiviert wird. Es fängt gerade nicht an, sofort zu verfolgen, ich denke, dass es wegen der Tatsache ist, dass ich die Aufkleber und die Linien entfernte, die x/y-Achsen zeigen. – potato

+0

Würde es Ihnen etwas ausmachen, ein Video zur Verfügung zu stellen? Ich verstehe nicht wirklich, was meinst du, wenn es nicht schwebt oder das Problem, das ich erstellt habe. Vielleicht ist es nur ein Fehler auf Ihrem PC oder so. Ich denke, dass der Touchtracer normal funktioniert (außer dem Problem). – KeyWeeUsr