结合 Tkinter 和 win32ui 使 Python 在退出时崩溃

Posted

技术标签:

【中文标题】结合 Tkinter 和 win32ui 使 Python 在退出时崩溃【英文标题】:Combining Tkinter and win32ui makes Python crash on exit 【发布时间】:2015-04-27 17:16:53 【问题描述】:

在使用带有 Python 2.7 的 winapi(我在 Windows 8.1 上)构建基本应用程序时,我尝试在程序中添加一个小的 Tkinter gui。问题是,每当我关闭应用程序窗口时,Python 就会完全崩溃(基本上会收到崩溃消息)。

我在多个地方找到了有关此问题的报告,但找不到修复或解决方案。以下是一些来源:

http://sourceforge.net/p/pywin32/bugs/443/#8bde

http://www.gossamer-threads.com/lists/python/python/134956(这个是2002年的!)

最多可以复制这4行:

from Tkinter import Tk
import win32ui

root = Tk()
root.mainloop()

运行后关闭窗口。 有谁知道这个的解决方案?有什么解决方法的建议吗?

【问题讨论】:

嗯,可能是我安装的那个版本吧?当我有机会启动我的 Windows 机器时,我会检查我的 @eyalzek,我遇到了和你一样的崩溃。仅在导入 win32ui 并且 Tk 尝试关闭窗口时发生。我在多台机器上重新制作了它(使用 Windows Server 2008)。 我过去也遇到过这个错误,我最终只使用 Tkinter 来避免它。显然,窗口管理/UI 方面存在一些冲突......我不知道在你的情况下它是否可以避免,但如果我有选择的话,我总是从一开始就坚持一个框架。 我刚刚检查了 Py 3.6.4,看起来这个问题可能已经消失了。我认为它仍在 Py 3.6.3 中。有谁想确认 Python 3.6.4 和 PyWin32-221 解决了这个问题? 存在the "horrible hack" solution。 【参考方案1】:

在 Windows 上创建一个按钮并通过此按钮关闭您的程序。这是我的脚本:

from tkinter import *
import win32ui

win = Tk()
frame = Frame(win)
frame.pack(padx = 10, pady = 10)
b1 = Button(frame, text = "Close", command = win.destroy)
b1.pack()
win.mainloop()

【讨论】:

【参考方案2】:

一种解决方法是使用 pythonw 调用 Tkinter-win32UI 应用程序。 Python 不会崩溃。

在 Win 10 上使用 Python 3.6.3 测试。

【讨论】:

以上是关于结合 Tkinter 和 win32ui 使 Python 在退出时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

tkinter.py

[Pygame&tkinter]真·中文输入框

tkinter的GUI设计:界面与逻辑分离

Python3.5、Win32gui、Tkinter。我无法从屏幕获取 Pixel

Python GUI编程(Tkinter)Menu顶层菜单

将 file.ui 转换为 file.py 时出错