【问题标题】:Stop Python turtle onscreenclick() when drawing绘图时停止 Python turtle onscreenclick()
【发布时间】:2017-09-17 09:53:26
【问题描述】:

这是我的代码出错的地方:

onscreenclick(Button.clicked,1)
listen()
mainloop()

onscreenclick() 转到 Button.clicked,它检查坐标是否落在任何按钮上。如果是这样,它会以背景颜色覆盖它们。但是,如果擦除过程进行到一半,用户再次点击,擦除将停止。

我的问题:有没有办法让 onscreenclick() 只在海龟不绘图时才起作用?

干杯, 杰克。

【问题讨论】:

    标签: python turtle-graphics


    【解决方案1】:

    创建一个在点击时改变值的变量怎么样?

    类似这样的:

    isdrawing = False
    if (Button.clicked == 1) and (isdrawing = False):
        isdrawing = True
    elif (Button.clicked == 1) and (isdrawing = True):
        isdrawing = False
    

    然后,您可以检查变量 isdrawing 是 True 还是 False,并要求它的某个值来运行其他函数。

    【讨论】:

    • 实际上,我认为您的说法是对的,只是抱歉我没有向您展示足够多的代码。
    • 没问题!很高兴它有效。是的,在这里显示所有(相关)代码是一种很好的做法。
    【解决方案2】:

    一段时间后,我想出了一个解决方案:

    import turtle as t
    
    t.speed(1)
    working = False
    
    def drawShape(x, y):
        global working
        working = True ##True while drawing.
        t.goto(x, y)
        working = False ##false, drawing is over.
    
    def clicked(x, y):
        global working
        if working == False: ##if turtle not drawing
            drawShape(x, y)
    
    t.onscreenclick(clicked)
    t.mainloop()
    

    【讨论】:

      【解决方案3】:

      这是我经常使用的一个可能更简单的解决方案——禁用事件处理程序中的事件并在退出时重新启用:

      import turtle
      
      turtle.speed('slowest')
      
      def drawShape(x, y):
          turtle.setheading(turtle.towards(x, y))
          turtle.goto(x, y)
      
      def clicked(x, y):
          turtle.onscreenclick(None)
          drawShape(x, y)
          turtle.onscreenclick(clicked)
      
      turtle.onscreenclick(clicked)
      
      turtle.mainloop()
      

      它也适用于海龟光标的 ondrag() 处理程序,但请确保在拖动时使用 turtle.speed('fastest')

      【讨论】:

        猜你喜欢
        • 2018-05-03
        • 1970-01-01
        • 2016-07-20
        • 2016-10-03
        • 2016-11-20
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 2019-08-08
        相关资源
        最近更新 更多