【问题标题】:Python tkinter askopenfilename not respondingPython tkinter askopenfilename 没有响应
【发布时间】:2019-01-10 17:54:17
【问题描述】:

我正在使用 tkinter asopenfilename 来触发文件选择器,以便从我的本地目录中读取文件。我的问题是选择文件后,窗口冻结,python“没有响应”。

我已经尝试过这篇帖子的答案:Tkinter askopenfilename() won't close 不走运。

下面是我的代码:

from tkinter import Tk
from tkinter.filedialog import askopenfilename

root = Tk()
root.withdraw() 
root.update()
filename = askopenfilename() 
print(filename)

我有什么遗漏的吗?如果您需要更清晰的信息,请告诉我。谢谢!

【问题讨论】:

  • 在 win10 上使用 Python 3.6.5 对我来说工作正常。您使用的是什么版本和 IDE?
  • 我在 OSX 上使用 Python 3.6.3。它在 Jupyter Notebook 上运行
  • 看到another question,其中有一条评论说:“在 askopenfilename() 之后调用 root.update() 有效”。对于 OSX 和 python2。也许值得一试。
  • 是的,把 root.update() 放在工作之后!谢谢@figbeam
  • 我相信你不需要 .update() 方法来做你想做的事。可以删除整行。试试看:)。

标签: python tkinter


【解决方案1】:

我尝试了上述所有解决方案,但似乎没有为我解决同样的问题。对话框正在打开,但在后台某处。

在别处找到了这段代码,它对我来说就像一个魅力。在 Windows 10、python 3.x 和使用 Jupyter Notebook 上也是如此。

张贴在这里,以防它可以帮助别人。

    import tkinter as tk
    from tkinter import filedialog
    root = tk.Tk()
    root.withdraw()
    root.call('wm', 'attributes', '.', '-topmost', True)
    file_path = filedialog.askopenfilename( 
    %gui tk
    print(file_path)

【讨论】:

    【解决方案2】:

    我尝试在我的 MacOS 中的 filename = askopenfilename() 之后使用 root.update()。

    以下对我有用-

    from tkinter import Tk
    from tkinter.filedialog import askopenfilename
    root = Tk()
    root.withdraw() 
    filename = askopenfilename() 
    root.update()
    print(filename)
    

    【讨论】:

      【解决方案3】:

      我在 MacOS 上也有同样的行为,添加 iPython 魔法 %gui tk 似乎可以解决问题:

      from tkinter import Tk
      from tkinter.filedialog import askopenfilename
      
      %gui tk
      root = Tk()
      root.withdraw() 
      filename = askopenfilename(multiple=True) 
      
      print(filename)
      

      来自docs

      %gui tk      # enable Tk event loop integration
      

      【讨论】:

        【解决方案4】:
        askopenfilename doesn't work in windows
        
        
        from tkinter import *
        #from tkFileDialog import askopenfilename
        import tkinter.filedialog
        
        def callback():
            name= tkinter.filedialog.askopenfilenames() 
            print (name)
        
        errmsg = 'Error!'
        Button(text='File Open', command=callback).pack(fill=X)
        mainloop()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-12-29
          • 1970-01-01
          • 1970-01-01
          • 2016-01-10
          • 2020-11-11
          • 1970-01-01
          • 2021-03-19
          • 2015-11-19
          相关资源
          最近更新 更多