Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python gtk的键盘中断?_Python_Python 3.x_Gtk_Try Catch - Fatal编程技术网

python gtk的键盘中断?

python gtk的键盘中断?,python,python-3.x,gtk,try-catch,Python,Python 3.x,Gtk,Try Catch,正如问题所说,我试图让键盘中断发生在Gtk.main()正在进行时,但是,它似乎没有注意到键盘中断发生在函数完成之后 因此,我尝试将Gtk.main()粘贴到一个单独的线程中,让主线程找到键盘中断,并终止线程,但随后发现Gtk不能像中所述很好地处理线程 我想不出任何其他方法可以让键盘中断工作。这可能吗 我正在使用python3,希望我的程序最终能够跨平台。因为使用pygobject编写的gtk应用程序在终端上使用Ctrl+C时不会自动关闭 要解决此问题,可以安装Unix信号处理程序,如下所示:

正如问题所说,我试图让键盘中断发生在Gtk.main()正在进行时,但是,它似乎没有注意到键盘中断发生在函数完成之后

因此,我尝试将Gtk.main()粘贴到一个单独的线程中,让主线程找到键盘中断,并终止线程,但随后发现Gtk不能像中所述很好地处理线程

我想不出任何其他方法可以让键盘中断工作。这可能吗

我正在使用python3,希望我的程序最终能够跨平台。

因为使用pygobject编写的gtk应用程序在终端上使用Ctrl+C时不会自动关闭

要解决此问题,可以安装Unix信号处理程序,如下所示:

if __name__ == '__main__':
    import signal
    signal.signal(signal.SIGINT, signal.SIG_DFL)
    your_application_main()

被接受的答案对我不起作用。我通过将
Gtk.main()
调用替换为
GLib.MainLoop().run()
,解决了这个问题,如中所述。

在使用信号模块重写SIGINT处理程序时,我也遇到了问题(python线程上的100%CPU);我的另一个选择是:

def main():
    self.mainloop = GObject.MainLoop()
    try:
        self.mainloop.run()
    except KeyboardInterrupt:
        logger.info('Ctrl+C hit, quitting')
        self.exit()

def exit():
    self.mainloop.quit()

你能澄清一下你想要实现的目标吗?您想捕捉像
Ctrl+C
这样的内容吗。如果您在终端中运行程序,然后按ctrl+c,在窗口关闭之前不会发生任何事情。这似乎也适用于libgit2(pygit2)调用,允许UserInterrupt中断低级库调用(我不知道全部细节,我只知道我立即取回shell)