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

3

我想从用户那里简单地获取一个文件名,使用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 Oakley
Bryan,你说的“事件循环”是指mainloop()吗? - John Bell
@约翰·贝尔。这对我有用。 - toyota Supra
3个回答

0

filedialog.askopenfilename()之后添加root.update()会使得文件选择对话框在文件被选中后关闭。

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

请参考:Tkinter askopenfilename()无法关闭


0
我用的一个解决方法是在从文件浏览器中选择文件后“撤回”tkinter窗口。以下是我使用的代码片段 -
import tkinter
from tkinter import filedialog

def selectCustomerFileTK():
    root = tkinter.Tk()
    root.wm_attributes('-topmost', 1)
    filename = filedialog.askopenfilename()
    root.withdraw()
    return filename

getfile = selectCustomerFileTK()

当您选择文件时,它会打开一个tkinter窗口,但是在您选择文件并按“打开”按钮后,由于“root.withdraw()”命令,tkinter窗口和文件浏览器都会关闭。


-2

在编程中,你不需要指定模块名称

file_name = filedialog.askopenfilename()

尝试

file_name = askopenfilename()

而不是


谢谢。我刚试了一下,但描述的行为没有改变。 - John Bell
我尝试了你的代码,它运行良好。看起来问题不在代码本身。 - user2737120

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接