tkFileDialog和pyperclip阻止脚本退出

时间:2018-11-04 20:57:52

标签: python python-2.7 tkinter exit pyperclip

同时导入了tkFileDialog和pyperclip的脚本不会退出。 (Python2.7) 工作示例,我的脚本按预期退出:

import Tkinter, tkFileDialog
root = Tkinter.Tk()
root.withdraw()
file_path = tkFileDialog.askopenfilename()
root.destroy()

以及:

import pyperclip
print ('whatever')

但是,以下内容将阻止我的脚本退出(为强调起见添加了{raise SystemExit):

import Tkinter, tkFileDialog
import pyperclip
root = Tkinter.Tk()
root.withdraw()
file_path = tkFileDialog.askopenfilename()
root.destroy()
raise SystemExit

导入两个模块都可以正常工作,必须打开tkFileDialog才能创建错误。 当作为脚本调用时,调用os._exit()或引发SystemExit的任何代码会软锁定解释器或python进程。
看来,打开pyperclip时加载tkFileDialog时会出现问题,因为以下片段按预期工作:

import Tkinter, tkFileDialog
root = Tkinter.Tk()
root.withdraw()
file_path = tkFileDialog.askopenfilename()
root.destroy()
import pyperclip
raise SystemExit

尽管如此,无论如何,关键部分之后的每一行代码均按预期执行,但是提高SystemExit会创建一个软锁。
但是,由于python不允许卸载模块,因此不能将其用作解决方法。

我在做什么错?有任何解决方法的想法吗?

1 个答案:

答案 0 :(得分:0)

这不是真正的解决方案,但是我能提供的最好的解决方案是: 从python 2.7切换到python 3.7(因此从Tkinter 8.5切换到8.6)对我来说有用。

当然,这还有很多其他含义,我无法测试。

在旁注中-由于其他人无法复制该问题: 我有机会在另一台Windows 10计算机上运行我的代码片段-在相同的设置下它可以完美地工作。因此,问题肯定与底层系统有关,而不是pyperclip或Tkinter本身。