Python Turtle Wait For Click
I'd like to be able to pause and contemplate each step of this program, and move on to the next step by clicking the screen. Initially I tried adding a bunch of events, but then my
Solution 1:
How about OOP to the rescue! We subclass Turtle to make one that queues everything it's asked to do. Then we set an onclick()
handler that pops one item off that queue and executes it:
import sys
import turtle
classQueuedTurtle(turtle.RawTurtle):
_queue = []
_pen = None
_screen = Nonedef__init__(self, shape=turtle._CFG["shape"], undobuffersize=turtle._CFG["undobuffersize"], visible=turtle._CFG["visible"]):
if QueuedTurtle._screen isNone:
QueuedTurtle._screen = turtle.Screen()
self._screen.onclick(lambda *args: self.queue_pop())
turtle.RawTurtle.__init__(self, QueuedTurtle._screen, shape=shape, undobuffersize=undobuffersize, visible=visible)
defqueue_pop(self):
if self._queue:
function, arguments = self._queue.pop(0)
return function(*arguments)
print("Empty queue popped!", file=sys.stderr)
defbackward(self, *args):
self._queue.append((super().backward, args))
defforward(self, *args):
self._queue.append((super().forward, args))
defright(self, *args):
self._queue.append((super().right, args))
defleft(self, *args):
self._queue.append((super().left, args))
defup(self, *args):
self._queue.append((super().up, args))
defdown(self, *args):
self._queue.append((super().down, args))
defcolor(self, *args):
self._queue.append((super().color, args))
classTree(object):
def__init__(self):
self.t = QueuedTurtle()
self.t.left(90)
self.t.up()
self.t.backward(100)
self.t.down()
self.t.color("green")
self.tree(75)
deftree(self, branchLen):
if branchLen > 5:
self.t.forward(branchLen)
self.t.right(20)
self.tree(branchLen - 15)
self.t.left(40)
self.tree(branchLen - 15)
self.t.right(20)
self.t.backward(branchLen)
tree = Tree()
tree.tree(10)
turtle.mainloop()
This is a partial implementation with just enough code to make your example program work. Run it, and then start clicking your mouse.
We can probably even programmatically generate the wrapper methods for QueuedTurtle.
Post a Comment for "Python Turtle Wait For Click"