Python 3.6 - AttributeError:模块“tkinter”没有属性“filedialog”

Bar*_*ysz 8 tkinter python-3.x

几分钟前,我的功能运行良好。没有修改代码,只是安装了PyAudio。我根据主题收到错误。无论是从命令行还是 IDE 运行它都没有关系,同样的错误。有任何想法吗?

def DataFinder():
    #imports and initialize
    import pandas as pd
    import tkinter as tk

    finder = tk.Tk()
    finder.withdraw()

    __dataFlag = False
    #ask user to select a file
    __path = tk.filedialog.askopenfilename()
    #check the extension to handle reader
    #for csv files
    if __path.endswith('.csv')==True:
        df = pd.read_csv(__path,header=0)
        return df
        __dataFlag = True
    #and for excel files
    elif __path.endswith('.xls')==True:
        df = pd.read_excel(__path,header=0)
        return df
        __dataFlag = True
    #if a file is not a supported type display message and quit
    else:
        __dataFlag = False

    #check if there is a data to be returned
    if __dataFlag==True:
        return df
    else:
        print('The file format is not supported in this version.')
Run Code Online (Sandbox Code Playgroud)

Mak*_*kan 9

显式导入filedialog 可以解决问题。因此,您只需将此行添加到您的代码中:

import tkinter.filedialog
Run Code Online (Sandbox Code Playgroud)

您可以在为什么 tkinter 模块在通过命令行运行时引发属性错误而不是通过 IDLE 运行时引发属性错误中找到更多信息


Han*_*k W 8

以下代码对我不起作用:

import tkinter as tk
import tkinter.filedialog
Run Code Online (Sandbox Code Playgroud)

但以下确实有效:

import tkinter
import tkinter.filedialog
Run Code Online (Sandbox Code Playgroud)

还有这个:

import tkinter.filedialog
import tkinter as tk
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助

笔记

正如Vaidøtas I.所提到的,您不能filedialogtkinter. 因为您没有导入原始tkinter版本而是别名版本tk

  • 我可以告诉你为什么你的第一个不起作用,因为你将 tkinter 别名为 tk ,然后在别名时从 tkinter 导入了 filedialog 。 (2认同)