我试图在我的代码中实现touchtracer演示示例。
Here is the original page

我意识到由于必要的touch.grab(self)事件,跟踪仅在延迟(按下并按住按钮之后)后才起作用。但是,我想在第一步之后立即看到没有延迟的痕迹。有什么方法可以做到而又不会打扰痕迹?

编辑:“延迟”是指激活跟踪的保持操作。当前,需要按住+来启动跟踪器。我希望能够随时随地进行跟踪,而无需“按住”。

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'])

最佳答案

好的,其中一个库看起来像是版本问题。我在在virtualbox上运行的Ubuntu 14.0构建的python2.7中使用了此功能。我更新了与python相关的所有内容,并使用库重新安装了kivy,问题已解决。我仍然不确定是什么原因造成的,因为我没有在日志中收到任何错误消息,但是看起来这是由于错误或未正确安装的kivy。

关于python - 奇异搏击手,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37933920/

10-12 20:09