gpt4 book ai didi

Python 进程不会在 GTK 循环退出时退出

转载 作者:太空狗 更新时间:2023-10-29 11:37:35 28 4
gpt4 key购买 nike

问题

我松散地关注 this Python GTK tutorial ,但 Python 进程本身在 gtk 主循环退出后不会退出,也不响应终端中断——它必须被杀死 (SIGTERM)。这是我的完整代码:

from gi.repository import Gtk
from sys import exit

# debugger
# import pdb; pdb.set_trace()

class Handler:
def on_MainWindow_destroy(self):
Gtk.main_quit(*args)
exit()

if __name__ == '__main__':
builder = Gtk.Builder()
builder.add_from_file('gtkgui.glade')
builder.connect_signals(Handler())

window = builder.get_object("window1")
window.show_all()

Gtk.main()

我用 glade 界面运行脚本,它看起来没问题,可以进行可视化交互,并在退出时关闭,但 python 进程保持运行状态并且不会松开终端。 (我现在运行的是 Ubuntu 12.10。)

[21時25分47秒]▶ python --version
Python 2.7.3
[21時25分47秒]▶ python clientest.py

(window appears, close window)
^C^C^C^C^C^C
(no response)

我尝试过的

我根据 this question 的建议分别添加了 quit()exit()行为没有变化。

我还尝试按照 this question 中的说明进行调试,但调试器似乎也与脚本一起挂起。

问题

这是预期的行为吗?如何确保 Python 进程在 GTK 循环结束时退出?

最佳答案

在 PyGObject 中,Gtk.main_quit 接受可变数量的参数(被忽略)。这意味着您可以直接将其用作连接到窗口“销毁”信号的回调。

window.connect('destroy', Gtk.main_quit)

您还应该能够通过在 Glade 中设置一个“销毁”信号处理程序来从 glade 文件连接它,类似于您所做的:

class Handler:
def on_mainWindow_destroy(self, *args):
Gtk.main_quit()

builder.connect_signals(Handler())

请注意,不需要调用 sys.exit()。 sys.exit() 引发“SystemExit”异常,该异常不会通过 GTK+ 信号回调。

关于Python 进程不会在 GTK 循环退出时退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23928185/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com