我正在使用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)发布于 2013-01-03 07:54:01
我以前从来没有听说过Calico,但从5秒钟的the docs来看,我看到了这个:
getMouse() -等待用户单击并返回窗口中(x,y)的位置
所以,我敢打赌,这就是为什么你必须在点击Q键之前点击你的窗口才会有任何效果--因为你的程序被困在getMouse()调用中等待,正如文档所说的那样。
即使文档没有解释这一点,您也可以通过添加一些打印/日志记录和/或在调试器中运行,来查看当它不响应您的按键时,它在哪里停滞。
例如,执行此操作的快捷方法:
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的函数,它们看起来正是您在这里所需要的。
https://stackoverflow.com/questions/14130783
复制相似问题