Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python turtle.ondrag不工作_Python_Python 2.7_Turtle Graphics - Fatal编程技术网

Python turtle.ondrag不工作

Python turtle.ondrag不工作,python,python-2.7,turtle-graphics,Python,Python 2.7,Turtle Graphics,我一直在尝试用Python Turtle制作一个绘画程序,但由于某些原因,它无法工作。我正在使用钢笔工具,我的代码如下所示 from turtle import * import random pen() bgcolor('black') pencolor('white') pen.ondrag(pen.goto) listen() mainloop() 我看了这个,上面写着要输入turtle.ondragturl.goto,但是因为我用的是笔,所以它应该和pen.ondrag一样工作,但是

我一直在尝试用Python Turtle制作一个绘画程序,但由于某些原因,它无法工作。我正在使用钢笔工具,我的代码如下所示

from turtle import *
import random

pen()
bgcolor('black')
pencolor('white')
pen.ondrag(pen.goto)
listen()
mainloop()
我看了这个,上面写着要输入turtle.ondragturl.goto,但是因为我用的是笔,所以它应该和pen.ondrag一样工作,但是它没有,所以请有人把它清理一下


谢谢Jellominer

我将简化并澄清提问者给出的代码:

from turtle import *

ts = Screen(); tu = Turtle()
ts.listen()
ondrag(tu.goto)
mainloop()
这很有效。你必须点击乌龟并拖动它。

首先,笔不是你想要的功能。第二,虽然笔是乌龟的同义词,但笔不是乌龟的同义词。如果你想用钢笔而不是乌龟,下面介绍如何使用ondrag:

goto在文档中是一个很好的简短示例,但实际上并不实用。您希望在处理事件时禁用事件处理程序,否则事件会堆积起来。当你拖动鼠标时,把鼠标朝着你的光标移动是很好的

from turtle import *
ts = Screen()
ondrag(goto)
shapesize(10)
pensize(40)
speed(0)
mainloop()
我认为这肯定会奏效

您可以更改大小和其他内容 在这里,您使用的是默认的海龟


很抱歉,您需要处理缩进问题

请发布整个代码。什么是钢笔?你是说方法吗?这不是一个对象,您不能将其与goto或ondrag一起使用lines@Jellominer要重复凯文说过的话,你需要告诉我们什么是钢笔。如果您所指的是方法turtle.pen,那么它没有ondrag属性是有道理的。如果你能描述一下你的程序应该做什么,我们会帮你的。ondrag不是pen方法,所以pen.ondrag没有多大意义。乌龟。乌龟是不同的,它在乌龟进口中找到了乌龟。我认为,如果您首先在代码中为每个单独的对象指定一个名称以供使用,事情会变得容易得多:比如screen=screen和/或brush=Turtle,这样您就可以说brush.ondragbrush。goto@Meep尝试了你所说的,程序运行,但乌龟没有移动到我单击的位置。命令。侦听对于键盘事件是必需的,不是鼠标事件,所以你不需要ts。同样,你也不需要tu,因为你可以简单地说ondraggoto,因为你导入了*并且可以使用默认的turtle。当然,这种方法不太管用。但它很简单。实际上,这段代码并不真正有效。在声明ondragtu.goto中,您正在谈论两种不同的海龟,即要求默认海龟拖动您的海龟。你可以看到这一点,如果你把海龟拖向窗口的角落。然后试着再拖一次那只乌龟——它不起作用了。你必须回到窗口中心不移动的乌龟,再次拖动另一只乌龟。这就是使用import*时会发生的情况——混淆了函数接口和面向对象的海龟接口。我重新复制了一个文件,并在Python2和Python3下运行,我支持我的主张。我在Unix下的终端窗口中运行,您是否正在使用其他环境?goto调用涉及两个海龟,ondrag是一个在默认海龟上运行的函数。goto在您创建的海龟上调用一个方法。两者都在屏幕上处于活动状态。有关这种二元性的解释,请参见。你试过我描述的练习吗?初始拖动后没有看到两个三角形吗?好的,不需要“侦听”。但它不会产生错误,最重要的是,代码可以正常工作!YouI真的很沮丧,因为ondrag有时似乎工作,有时不工作!最后,我阅读了@Apostolos的建议,如果你点击屏幕,你必须点击乌龟,但不是乌龟,ondrag将不起作用!非常违反直觉。不,没有任何屏幕。所以你完蛋了,除非你想把海龟弄大,所以你不得不点击它。
from turtle import *
ts = Screen()
ondrag(goto)
shapesize(10)
pensize(40)
speed(0)
mainloop()