Skip to main content
 首页 » 编程设计

python之如果导入 win32ui,为什么脚本不退出

2025年05月04日22lvdongjie

我在 Windows 7 下使用 Python 2.7.2 遇到了一个非常奇怪的意外问题..

此代码不会退出:

import gtk 
import win32ui 
w = gtk.Window() 
w.connect("destroy", gtk.main_quit) 
w.show_all() 
gtk.main() 
print 'stop-point' 
quit() 

窗口关闭,我得到“停止点”,一切都应该没问题。 但控制台不会关闭。 即使 quit() 也无济于事。

问题出在import win32ui 如果我删除它,一切正常。

此外,在只有

的版本中
import gtk 
import win32ui 

一切正常。

win32ui有什么问题? 如何强制关闭我的应用程序?

即使没有 GTK 也会发生:

import win32gui, win32ui 
 
try: 
    result = win32gui.GetOpenFileNameW() 
except win32gui.error as result: 
    pass 
print result 
 
# script ends but python doesn't exit 

请您参考如下方法:

问题是由pywin32的bug引起的:https://sourceforge.net/tracker/?func=detail&aid=3562998&group_id=78018&atid=551954

在修复 pywin32 中的错误之前,我想出了一个可怕的 hack 作为解决方法。将此代码放在退出例程的末尾。在执行此操作之前尽可能多地清理。变通方法使用 Windows taskkill 工具终止当前任务。

import os 
 
# kill this process with taskkill 
current_pid = os.getpid() 
os.system("taskkill /pid %s /f" % current_pid) 

用atexit 将上述代码注册为一个函数可能允许 Python 首先进行一些清理:

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)