首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从while true循环终止(Calico IDE)

从while true循环终止(Calico IDE)
EN

Stack Overflow用户
提问于 2013-01-03 07:18:33
回答 1查看 549关注 0票数 0

我正在使用Calico IDE中的Graphics和Myro包,有人能想出一种方法让我按下'q‘键并让程序终止吗?目前,当我按下“Q”键时,我必须在我的窗口上单击鼠标才能终止。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2013-01-03 07:54:01

我以前从来没有听说过Calico,但从5秒钟的the docs来看,我看到了这个:

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

所以,我敢打赌,这就是为什么你必须在点击Q键之前点击你的窗口才会有任何效果--因为你的程序被困在getMouse()调用中等待,正如文档所说的那样。

即使文档没有解释这一点,您也可以通过添加一些打印/日志记录和/或在调试器中运行,来查看当它不响应您的按键时,它在哪里停滞。

例如,执行此操作的快捷方法:

代码语言:javascript
复制
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的函数,它们看起来正是您在这里所需要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14130783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档