如何正确创建使用Zelle's图形.py“程序?

2024-06-28 19:25:10 发布

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

在Zelle的《编程Python》一书中,第6章的第17个问题要求一个函数,该函数接受两个参数:“shape”和“newCenter”,然后根据鼠标单击提供的新点移动或重新绘制现有对象。在

我已经知道了,如果再给函数添加两个参数“myX”和“myY”,那么我就可以减去move方法的差值了。我无法理解的是,如何仅使用上面指定的两个参数来执行相同的计算。这是我的代码:

def moveTo(shape, newCenter, myX, myY):
    myShape = shape
    myNewX = newCenter.getX()
    myNewY = newCenter.getY()
    myXUpd = myNewX - myX
    myYUpd = myNewY - myY
    myShape.move(myXUpd, myYUpd)
    return myNewX, myNewY

def main():
    win = GraphWin("My Graph Win", 500, 500)
    win.setBackground("white")
    win.setCoords(0, 0, 10, 10)
    Text(Point(5, 8.5), "Please click 10 times.").draw(win)
    myPoint = win.getMouse()
    myX = myPoint.getX()
    myY = myPoint.getY()
    myCircle = Circle(myPoint, 2)
    myCircle.draw(win)

    for x in range(1, 10):
        myNewPoint = win.getMouse()
        myX, myY = moveTo(myCircle, myNewPoint, myX, myY)

    win.close()

另外,由于我是一个相当新的Python开发人员,所以任何关于简化、样式或结构的一般性提示都是值得赞赏的。在

谢谢!在


Tags: 函数参数movedefwinshapemovetomypoint
1条回答
网友
1楼 · 发布于 2024-06-28 19:25:10

我自己解决了这个问题,所以读过Zelle“Python编程”一书的人都可以从我的经验中学习。我只是把X和Y从我传递进来的形状对象中拉出来,这样就省去了自己再次单独传递它们的麻烦。下面是一些删减了部分内容的更新代码。在

def moveTo(shape, newCenter):
    oldCenter = shape.getCenter()
    myOldX, myOldY = oldCenter.getX(), oldCenter.getY()
    myNewX, myNewY = newCenter.getX(), newCenter.getY()
    moveX = myNewX - myOldX
    moveY = myNewY - myOldY
    shape.move(moveX, moveY)
    return shape

def main():
    win = GraphWin("My Graph Win", 500, 500)
    win.setBackground("white")
    win.setCoords(0, 0, 10, 10)
    Text(Point(5, 8.5), "Please click 10 times.").draw(win)
    myPoint = win.getMouse()
    myX, myY = myPoint.getX(), myPoint.getY()
    myShape = Circle(myPoint, 2)
    myShape.draw(win)

    for x in range(1, 10):
        newCenter = win.getMouse()
        myShape = moveTo(myShape, newCenter)


    win.close()

相关问题 更多 >