0

问题是修改下面的程序,以便每次连续单击都会在屏幕上绘制一个额外的正方形。

这是要修改的程序。

   def main():
win = GraphWin()
shape = Rectangle(Point(50,50), Point(70,70))
shape.setOutline("red")
shape.setFill("red")
shape.draw(win)
for i in range(10):
    p = win.getMouse()
    c = shape.getCenter()
    dx = p.getX() - c.getX()
    dy = p.getY() - c.getY()
    shape.move(dx,dy)
win.close()

为了解决这个问题,我使用了 clone() 函数。这是我的解决方案:

 def main():
win = GraphWin()
shape = Rectangle(Point(50,50), Point(70,70))
shape.setOutline("red")
shape.setFill("red")
shape.draw(win)
for i in range(10):
    p = win.getMouse()
    c = shape.getCenter()
    dx = p.getX() - c.getX()
    dy = p.getY() - c.getY()
    pshaw = shape.clone()
    pshaw.move(dx, dy)
win.close()

但是,该程序不起作用。我见过的其他解决方案涉及完全创建一个新形状,如下所示: 为什么我不能使用 clone()?

    def main():
win = GraphWin()
shape = Rectangle(Point(75,75),Point(125,125))
shape.setOutline('Red')
shape.setFill('Red')
shape.draw(win)

for i in range(5):
    p = win.getMouse()
    tx = p.getX()-25
    ty = p.getY()-25
    bx = p.getX()+25
    by = p.getY()+25

    shape2 = Rectangle(Point(tx,ty),Point(bx,by))
    shape2.setOutline('Red')
    shape2.setFill('Red')
    shape2.draw(win)


ct = Text(Point(100,180),'Click again to quit!')
ct.setStyle('bold')
ct.draw(win)
win.getMouse()
win.close()

主要的()

为什么 clone() 在这里不起作用?这不就是它被创建的目的吗?从头开始创建新形状的建议解决方案对我来说似乎是多余的。

任何帮助的尝试都非常感谢,我想提前说声谢谢:)我的头脑在旋转——期待向大师们学习!

4

1 回答 1

0

您简单的基于克隆的解决方案工作正常,您只需停止pshaw.draw(win)将新矩形添加到窗口的命令:

from graphics import *

win = GraphWin()

shape = Rectangle(Point(50, 50), Point(70, 70))
shape.setOutline("red")
shape.setFill("red")
shape.draw(win)

for _ in range(10):
    p = win.getMouse()
    c = shape.getCenter()
    dx = p.getX() - c.getX()
    dy = p.getY() - c.getY()
    pshaw = shape.clone()
    pshaw.move(dx, dy)
    pshaw.draw(win)

win.getMouse()
win.close()

在此处输入图像描述

于 2017-11-16T07:34:06.167 回答