从一个真正的循环终止(Calico IDE)

时间:2013-01-02 23:18:33

标签: python calico

我正在使用Calico IDE中的Graphics和Myro软件包,任何人都可以找到一种方法让我按下“q”键并让程序终止吗?目前,当我点击'q'键时,我必须在我的窗口上单击鼠标才能终止。

def main():
    win = Window(800,500)
    bg = Picture("http://www.libremap.org/data/boundary/united_states/contig_us_utm_zone_14_600px.png")
    bg.draw(win)
    while True:
        char = win.getKeyPressed()
        if char == 'q':
            win.close()
            break
        x, y = win.getMouse()
        MPO = Rectangle(Point(x,y), Point(x+10,y+10))
        MPO.fill = Color("white")
        MPO.draw(win)

1 个答案:

答案 0 :(得分:1)

我之前从未听说过Calico,但从5秒钟开始the docs,我看到了这一点:

  

getMouse() - 等待用户点击并返回窗口中的位置(x,y)

所以,我愿意打赌这就是为什么你必须在点击你的窗口之前点击Q键有任何影响 - 因为你的程序在getMouse()调用内等待,就像docs说它应该是。

即使文档没有解释这一点,你也可以通过在调试器中添加一些打印/日志记录和/或运行来快速解决它,看看它在没有响应你的按键时陷入困境。 / p>

例如,快速和肮脏的方式:

while True:
    print 'Before getKeyPressed'
    char = win.getKeyPressed()
    print 'After getKeyPressed, got', char
    if char == 'q':
        print 'About to close because of q'
        win.close()
        print 'Closed'
        break
    print 'Before getMouse'
    x, y = win.getMouse()
    print 'After getMouse, got', x, y

......等等。

当然,在现实生活中,您不希望为每一行代码添加一个print语句。 (并且,当你想要那个时,你需要一种更聪明的仪器方法而不是手动编写所有这些线。)但是你可以添加一些来缩小它到一般区域,然后放大和在该区域内添加更多内容,依此类推,直至找到罪魁祸首。

同时,如果您将代码更改为使用getMouseNow()而不是getMouse(),那么这将解决问题,但只能通过忙碌循环并尽快重复绘制窗口,无论是或不是你做了什么。

这里你真正需要的 - 就像任何GUI应用程序一样 - 是一个事件循环。我可以看到有一些名为onMouseDownonKeyPress的函数,看起来就像你需要的那样。