代码之家  ›  专栏  ›  技术社区  ›  Picachieu

当我尝试导入tkFileDialog时,总是出现错误

  •  -1
  • Picachieu  · 技术社区  · 7 年前

    this tutorial 创建我自己的简单文本编辑器。然而,我遇到了一个错误,我不知道如何修复。我正在运行以下代码:

    from tkinter import *
    import tkinter.tkFileDialog
    

    import tkinter
    import tkinter.tkFileDialog
    

    他们都给了我这个错误:

    Traceback (most recent call last):
      File "<pyshell#1>", line 1, in <module>
        import tkinter.tkFileDialog
    ModuleNotFoundError: No module named 'tkinter.tkFileDialog' 
    

    1 回复  |  直到 7 年前
        1
  •  3
  •   Mike - SMT    7 年前

    python3tkinter没有tkFileDialog导入。而是要导入 filedialog

    import tkinter as tk # this is the preferred import for tkinter
    from tkinter import filedialog
    
    root = tk.Tk()
    x = filedialog.askopenfilename()
    print(x)
    root.mainloop()
    

    如果你想只导入你特别需要的对话框,你可以这样做。

    import tkinter as tk # this is the preferred import for tkinter
    from tkinter.filedialog import askopenfilename
    
    root = tk.Tk()
    x = askopenfilename()
    print(x)
    root.mainloop()
    

    更新:根据布莱恩在下面提到的,这里是另一个例子,包括一个延迟,以帮助防止所提到的问题。尽管这只适用于在到达mainloop之前打开的dilog,对于许多应用程序,我认为这不是一个问题,因为在GUI中,对话框通常不是第一个出现的东西。不过,这仍然是一个很好的信息。

    import tkinter as tk
    from tkinter import filedialog
    
    root = tk.Tk()
    
    def print_file_name():
        x = filedialog.askopenfilename()
        print(x)
    
    root.after(100, print_file_name)
    root.mainloop()
    

    或:

    import tkinter as tk # this is the preferred import for tkinter
    from tkinter.filedialog import askopenfilename
    
    root = tk.Tk()
    
    def print_file_name():
        x = askopenfilename()
        print(x)
    
    root.after(100, print_file_name)
    root.mainloop()