【问题标题】:Python.exe keeps running after closing Gtk.main() when both Gtk and win32ui modules are imported导入 Gtk 和 win32ui 模块时关闭 Gtk.main() 后 Python.exe 继续运行
【发布时间】:2017-11-20 03:42:27
【问题描述】:

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

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

这是一个简单的测试脚本。这在我的系统上没有正确关闭。如果我注释掉

#import win32ui

它会正常关闭

from gi.repository import Gtk
import win32ui

class Window(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self)
        self.connect("destroy", Gtk.main_quit)
        self.show_all()

Window()
Gtk.main()

Gtk 和 win32ui 之间似乎有冲突。
我需要 win32gui 和 win32ui 来从 pe 文件中提取图标。
我该怎么办?

【问题讨论】:

    标签: windows python-2.7 gtk3 pywin32 pygobject


    【解决方案1】:

    在之前版本的 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 工作站上都​​发生了这种情况。

    【讨论】:

    • 谢谢它现在解决了我的问题。不过仍然希望有一个更优雅的解决方案。
    • 如果可以的话,我会在其他版本的 Python 和 Windows 上测试运行它,如果发现其他问题,我会更新我的答案。
    • 我也使用 pywin32 的 win32api、win32con 和 win32gui。似乎只有 win32ui 会引起问题
    猜你喜欢
    • 2020-05-27
    • 1970-01-01
    • 2020-06-13
    • 2018-10-12
    • 2019-08-05
    • 2023-03-23
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    相关资源
    最近更新 更多