我正在使用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)
答案 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应用程序一样 - 是一个事件循环。我可以看到有一些名为onMouseDown
和onKeyPress
的函数,看起来就像你需要的那样。