Python Turtle等待Cli

2024-10-01 11:24:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够暂停和思考这个程序的每一步,并通过点击屏幕进入下一步。最初,我尝试添加一堆事件,但后来我的大脑突然出现,提醒我这不是一个过程程序,第一个绑定将仍然是唯一的(!)。主程序如下,任何帮助非常感谢。在

  def tree(self, branchLen):
    if branchLen > 5:
      self.screen.onscreenclick(lambda x,y: self.t.forward(branchLen))
      self.screen.onscreenclick(lambda x,y: self.t.right(20))
      self.tree(branchLen-15)
      self.screen.onscreenclick(lambda x,y: self.t.left(40))
      self.tree(branchLen-15)
      self.screen.onscreenclick(lambda x,y: self.t.right(20))
      self.screen.onscreenclick(lambda x,y: self.t.backward(branchLen))

^{pr2}$

Tags: lambdaself程序righttreeif屏幕过程
1条回答
网友
1楼 · 发布于 2024-10-01 11:24:22

哎哟救人怎么样!我们将Turtle子类化,使它可以将它所要做的事情排成一列。然后我们设置一个onclick()处理程序,从队列中弹出一个项目并执行它:

import sys
import turtle

class QueuedTurtle(turtle.RawTurtle):

    _queue = []
    _pen = None
    _screen = None

    def __init__(self, shape=turtle._CFG["shape"], undobuffersize=turtle._CFG["undobuffersize"], visible=turtle._CFG["visible"]):

        if QueuedTurtle._screen is None:
            QueuedTurtle._screen = turtle.Screen()

        self._screen.onclick(lambda *args: self.queue_pop())

        turtle.RawTurtle.__init__(self, QueuedTurtle._screen, shape=shape, undobuffersize=undobuffersize, visible=visible)

    def queue_pop(self):
        if self._queue:
            function, arguments = self._queue.pop(0)
            return function(*arguments)

        print("Empty queue popped!", file=sys.stderr)

    def backward(self, *args):
        self._queue.append((super().backward, args))

    def forward(self, *args):
        self._queue.append((super().forward, args))

    def right(self, *args):
        self._queue.append((super().right, args))

    def left(self, *args):
        self._queue.append((super().left, args))

    def up(self, *args):
        self._queue.append((super().up, args))

    def down(self, *args):
        self._queue.append((super().down, args))

    def color(self, *args):
        self._queue.append((super().color, args))


class Tree(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)

    def tree(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()

这是一个部分实现,只包含足够的代码使示例程序正常工作。运行它,然后开始单击鼠标。在

我们甚至可以通过编程方式为QueuedTurtle生成包装器方法。在

相关问题 更多 >