0

我想显示一条消息,并在用户单击时关闭窗口。这应该在圆圈到达窗口底部时发生。我不知道该怎么做,一切正常,直到圆圈通过窗口底部,关闭消息不会弹出并且窗口不会在点击时关闭。我正在使用来自 Zelle for Python 的 graphics.py 图形库。我是 Python 的初学者,所以我现在的知识非常有限。我的代码如下:

from graphics import *

    def q2a():
        win = GraphWin("window",400,400)
        win.setCoords(0,0,400,400)
        win.setBackground("light grey")
        #drawing circle
        circle = Circle(Point(200,100),30)
        circle.setFill("red")
        circle.draw(win)
        #text
        message = Text(Point(200,200),"Click Anywhere to Begin")
        message.draw(win)
        #clicking
        while True:
            click = win.checkMouse()
            if click:
                message.undraw()
                while circle.getCenter().getY() < 170:
                    dy=1
                    dx = 0
                    dy *=-.01
                    circle.move(dx,dy)
        if circle.getCenter()== 0:
            circle.undraw()
            gameover = Text(Point(200,200),"Game Over - Click to Close")
            gameover.draw(win)
            win.checkMouse()
            win.close()


        q2a()
4

1 回答 1

0

我相信这个问题比你做的要简单。一个问题是这是一个无限循环:

while circle.getCenter().getY() < 170:
    dy=1
    dx = 0
    dy *=-.01
    circle.move(dx,dy)

由于圆的 Y 中心从 100 开始并减小,因此它始终小于 170,因此此循环永远不会结束,并且任何超出此点的代码都不会执行。让我们改用圆的半径 30,这样当它位于窗口底部时,圆就会停止。

另一个问题是,我相信您在checkMouse()真正需要时使用getMouse(). 阅读有关这两个命令之间区别的文档。

这是我对您的代码的返工(进行了一些样式调整。)我将 -0.01 增量更改为 -0.1,因为我没有耐心!

from graphics import *

RADIUS = 30
HEIGHT, WIDTH = 400, 400
CENTER = Point(HEIGHT / 2, WIDTH / 2)

def q2a():
    win = GraphWin("window", HEIGHT, WIDTH)
    win.setCoords(0, 0, HEIGHT, WIDTH)
    win.setBackground("light grey")

    # drawing circle
    circle = Circle(Point(WIDTH / 2, 100), RADIUS)
    circle.setFill("red")
    circle.draw(win)

    # text
    message = Text(CENTER, "Click Anywhere to Begin")
    message.draw(win)

    # moving
    win.getMouse()
    message.undraw()

    while circle.getCenter().getY() > RADIUS:
        circle.move(0, -0.1)

    # end game
    circle.undraw()
    gameover = Text(CENTER, "Game Over - Click to Close")
    gameover.draw(win)
    win.getMouse()
    win.close()

q2a()
于 2018-04-05T06:51:10.317 回答