调用 tkinter askopenfilename 方法后打开文件对话框冻结

Posted

技术标签:

【中文标题】调用 tkinter askopenfilename 方法后打开文件对话框冻结【英文标题】:Open File Dialog freezes after tkinter askopenfilename method is called 【发布时间】:2014-03-30 00:16:24 【问题描述】:

我试图通过tkinter.filedialog.askopenfilename() 简单地从用户那里获取文件名。该函数返回正常,下面的代码显示文件名正常,但对话框窗口在点击“打开”或“取消”后不会立即关闭,它会冻结。我正在使用 python 3.3.3 或 OSX 10.9.1 和 tcl/tK 8.5.9。

from tkinter import *
from tkinter.messagebox import *
from tkinter.filedialog import *

top = Tk()
top.withdraw()

file_name = filedialog.askopenfilename()

print (file_name)

【问题讨论】:

您是否尝试过启动事件循环后打开对话框? OSX 有它的 tkinter 特性,但一般来说,tkinter 需要一个事件循环才能正常运行。 Bryan,你所说的“事件循环”是指 mainloop() 吗? 【参考方案1】:

filedialog.askopenfilename() 之后添加root.update() 会在选择文件后关闭打开文件对话框。

root = tk.Tk()                     
root.withdraw()
file_path = filedialog.askopenfilename()
root.update()

参考:Tkinter askopenfilename() won't close

【讨论】:

【参考方案2】:

您不需要在中指定模块名称

file_name = filedialog.askopenfilename()

试试

file_name = askopenfilename()

改为

【讨论】:

谢谢。刚试过,但描述的行为没有改变。 我试过你的代码,它运行良好。看来问题不在于代码本身。

以上是关于调用 tkinter askopenfilename 方法后打开文件对话框冻结的主要内容,如果未能解决你的问题,请参考以下文章

允许用户在 tkinter askopenfilename() 中输入路径

macOS tkinter:askopenfilename 的文件类型如何工作

Kivy 中的 Askopenfilename 替代方案

解析 askopenfilenames() 的结果?

已选择Python tkinter验证文件

Python - 如何读取从Tkinter中选择的文件?