当导入Gtk和win32ui模块时,Python.exe在关闭Gtk.main()后继续运行

时间:2017-06-17 12:55:32

标签: windows python-2.7 gtk3 pywin32 pygobject

我在Windows 7上运行python 2.7.13 我正在用Gtk创建一个窗口(来自pygobject 3.18.2)。
我也使用win32ui(来自pywin32 221)。

当我导入两个模块时,我的程序运行得很好,直到我关闭它。窗口正常关闭,但python进程继续运行,用于运行脚本的cmd窗口不会返回到de cmd提示符。
我必须杀死python才能返回到提示符

这是一个简单的测试脚本。这在我的系统上并不合适。如果我发表评论

void BFS(Graph &g, int s) {
    bool *visited = new bool[g.size];
    for(int i = 0; i < g.size; i++)
        visited[i] = false;

    queue<int> q;

    visited[s] = true;
    q.push(s);

    while(!q.empty()) {
        s = q.front();
        cout << s << ",";
        q.pop();

        for(int i=0; i<g.size; i++) {
            if(!visited[i]) {
                visited[i] = true;
                q.push(i);
            }
        }
    }
    cout << endl;
}

它将关闭正确的

#import win32ui

看起来Gtk和win32ui之间存在冲突。
我需要win32gui和win32ui从pe文件中提取图标。
我该怎么办?

1 个答案:

答案 0 :(得分:3)

在以前版本的PyWin32上: https://sourceforge.net/p/pywin32/bugs/609/ https://sourceforge.net/p/pywin32/bugs/636/

import atexit, os

def taskkill_this():
    # kill this process
    current_pid = os.getpid()
    os.system("taskkill /pid %s /f" % current_pid)

atexit.register(taskkill_this)

似乎是一个提供的解决方法。

进一步检查后,它似乎与pywin32和Gtk UI事件进程发生冲突有关。如果可能的话,我建议使用其中一个而不是两个,或者像上面那样使用taskkill hack。

我也注意到,在我见过的所有情况下,这都发生在Windows 7工作站上。