2016-06-21 3 views
2

Я пытался реализовать демонстрационный пример touchtracer в своем коде. Here is the original pageKivy Grabbing Touch без задержки

я понял, что трассировка работает только с задержкой (после того, как вы нажмете и будете удерживать кнопку) из-за необходимости touch.grab (само) событие. Тем не менее, я хочу видеть след без задержки, сразу после первого хода. Есть ли способ сделать это, не нарушая работу трассировки?

EDIT: Под «задержкой» подразумевается удерживающее действие для активации трассировки. В настоящее время для запуска индикатора требуется нажатие + удержание. Я хочу быть в состоянии отслеживать на ходу, без «удержания».

EDIT2: Я чувствовал потребность объяснить, как моя версия touchtracer отличается от всех остальных, потому что никто не сталкивается с этой проблемой, кроме меня. Я вложил код touchtracer в шахту и удалил вертикальные/горизонтальные линии и этикетку. Таким образом, моя версия имеет только след. Вот как выглядит мои on_touch_down, on_touch_move и on_touch_up.

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

Просто загрузите этот пример и не можете получить какую-либо задержку между трассировками и нажатием кнопки мыши. Используется kivy 1.9.2 dev с python 2.7 – jligeza

+0

Я довольно уверен, что этот пример не должен вносить заметной задержки. То же самое происходит в других приложениях Kivy, и удаляется ли это, если вы удаляете вызов touch touch? – inclement

+0

Задержка, о которой я говорил, была активация трассировки нажатием и удержанием. Это не работает, если я перемещаю указатель с помощью действия левой кнопкой мыши. Я использую python 2.7 и kivy 1.9.1 и без захвата трассировки не работает. – potato

ответ

1

Хорошо, это похоже на проблему с версией одной из библиотек. Я использовал это в python2.7, построенном на Ubuntu 14.0, работающем на виртуальном боксе. Я обновил все, что связано с python, и переустановил kivy с библиотеками, и проблема исправлена. Я все еще не уверен, что вызвало это, так как я не получал никаких сообщений об ошибках в журнале, но похоже, что это было связано с ошибкой или неправильно установленным kivy.

0

Ах, я получил его сейчас! Таким образом, вы хотите нарисовать наведение - без необходимости нажимать кнопку - например, html/css :hover, правильно?

Был парень, который сделал повод для этого, но that file (+ backup в случае его исчезновения) является LGPL, поэтому я не уверен, как вы должны его лечить. Тем не менее, я определенно уверен, что лицензия не может запретить вам выполнять базовую операцию framework позволяет вам сделать это, так что ... отделите его, и вы хорошо пойдете, я думаю.

+0

Не совсем, я хочу использовать трассировку, которая активируется нажатием. Он просто не начинает трассировку сразу, я думаю, это связано с тем, что я удалил метки и линии, которые показывают оси x/y. – potato

+0

Не могли бы вы предоставить видео? Я действительно не понимаю, что вы имеете в виду, если это не зависание или проблема, которую я создал. Может быть, это всего лишь глюк на вашем компьютере или что-то в этом роде. Я думаю, что touchtracer работает нормально (кроме проблемы). – KeyWeeUsr

Смежные вопросы