【发布时间】:2018-11-04 20:57:52
【问题描述】:
同时导入 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 进程。
看来,在打开tkFileDialog 时加载pyperclip 时会出现问题,因为以下片段按预期工作:
import Tkinter, tkFileDialog
root = Tkinter.Tk()
root.withdraw()
file_path = tkFileDialog.askopenfilename()
root.destroy()
import pyperclip
raise SystemExit
不过,无论如何,关键部分之后的每一行代码都会按预期执行,但提升 SystemExit 会创建一个软锁。
这不能用作解决方法,因为 python 不允许卸载模块。
我做错了什么?任何解决方法的想法?
【问题讨论】:
-
所以当你调用打开文件名对话框时,你是在选择一个文件吗?
-
是的。退出对话框而不选择文件工作正常
-
好吧,
root.destroy()将结束 tk 实例,但是您可能需要使用quit()来关闭解释器。看看这个帖子:difference between root.destroy() and root.quit()? -
@mike-SMT 我知道。我遇到的问题是,
quit()、exit()、sys.exit()、os._exit,.... 都会产生软锁,当 tkFileDialog 实例打开时加载 pyperclip。无论我做什么,脚本都不会退出。 -
我在您的示例中看不到
import os。如果您还没有这样做,您需要在顶部添加import os。
标签: python python-2.7 tkinter exit pyperclip