2015-02-06 38 views
0

我已经完成了libtcod库的编码,包括C#和python包装。我目前的设置是KUbuntu 14.10,Python 2.7.8和libtcod 1.5.2。KUbuntu,Python和libtcod - console_is_window_closed不工作...?

我已经做了一些程序,工作正常,但我刚刚开始的最新似乎并不想让我关闭控制台窗口。

我可以从我运行该程序的控制台发送一个CTRL+C,它会关闭,但是,窗口的“x”按钮或点击数量似乎都不起作用。

我的代码如下:

''' 
justclose.py 
''' 

import sys 
import time 
import libtcodpy as libtcod 

libtcod.console_set_custom_font(b'lucida12x12_gs_tc.png', libtcod.FONT_TYPE_GREYSCALE | libtcod.FONT_LAYOUT_TCOD) 
libtcod.console_init_root(50,50, "The ever-present window", False) 
libtcod.console_flush() 

while not libtcod.console_is_window_closed(): 
    time.sleep(1) 

sys.exit 

当我运行程序,控制台上来,符合市场预期,而坐在那里等待console_is_window_closed返回true,这不可能发生。我不确定问题出在哪里。我可以运行其他程序,它们使用相同的初始化代码和相同的while循环,并且只需点击控制台窗口上的关闭按钮即可响应。

我试过寻找过程的一个阶段,但是,我不确定我是否可以解密它。没有什么东西立刻显得与众不同。

我想就如何找出问题发生的一些建议。谢谢。

编辑:具体来说,我想知道如何检查关闭窗口事件是否在传播,如果有,多远,它在哪里被困/忽略,这类事情。当我穿过strace时,当我点击关闭按钮时,我看不到任何事情发生。有没有更好的方法来调试呢?

回答

0

libtcod.console_check_for_keypress()代替time.sleep(1)。当程序每次迭代休眠1毫秒时,按下X时程序无法响应。当您按CTRL+C时它会退出,因为程序收到SIGINT信号并立即退出。用libtcod.console_check_for_keypress()代替time.sleep(1)使程序检查键盘上按下的键(如果有的话)。这样,程序不会阻止执行。