TypeError:askopenfilename()缺少1个必需的位置参数:'root'在[]中:

时间:2017-01-19 12:35:39

标签: python tkinter

我正在尝试编写一个代码,使用radiobutton打开文件资源管理器中的文件夹。我找到了一个例子,但我遇到了以下错误:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Program Files (x86)\Anaconda3\lib\tkinter\__init__.py", line 1550, in    __call__
return self.func(*args)
TypeError: askopenfilename() missing 1 required positional argument: 'root'

这是我的代码:

from tkinter import*
from tkinter import filedialog 
import tkinter.constants 

class filedialog(tkinter.Frame):
    def __init__(self, root):
        tkinter.Frame.__init__(self, root)

        Radiobutton_opt = {'fill': tkinter.constants.BOTH, 'padx': 5, 'pady': 5}
        tkinter.Radiobutton(self, text = "Browse",  
                command = self.askopenfilename
                ).grid( row=2, column =0, columnspan = 2, sticky =W)
        self.file_opt = options = {}

        self.dir_opt = options = {} 
        options['initialdir'] = 'C:\\Users\\Documents\\Python Scripts'

    def askopenfilename(self, root):
        filename = filedialog().askopenfilename(**self.file_opt)
        if filename:
            return open(filename, 'r')

    def askdirectory(self, root):
        return filedialog.askdirectory(**self.dir_opt)

if __name__=='__main__':
    root = Tk()
    filedialog(root).grid()
    root.mainloop()

按钮确实出现,但是当我按下它时,我收到错误。我是python的新手,非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

你有两个问题。首先,您直接从radiobutton调用self.askopenfilename而不给它所需的参数。这正是错误消息告诉您的内容。

其次,您已经定义了一个名为filedialog的类,它接受一个参数:root此类会覆盖filedialog模块。因此,从askopenfilename开始,您正在对同一个askopenfilename进行递归调用,并且无法提供所需的参数,因为self.file_opt是一个空字典。

答案 1 :(得分:0)

您的askopenfilename(self, root)功能需要root参数,但您没有通过

中的任何内容
tkinter.Radiobutton(self, text = "Browse",  
                command = self.askopenfilename
                ).grid( row=2, column =0, columnspan = 2, sticky =W)