我正在尝试编写一个代码,通过单选按钮在文件资源管理器中打开一个文件夹。我找到了一个示例,但是遇到了以下错误:

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新手,将不胜感激。

最佳答案

你有两个问题。首先,您直接从单选按钮调用self.askopenfilename,而没有提供必需的参数。这正是错误消息告诉您的内容。

其次,您定义了一个名为filedialog的类,该类带有一个参数:root。此类重写filedialog模块。因此,在askopenfilename中,您正在对相同的askopenfilename进行递归调用,并且由于self.file_opt是一个空字典,因此无法提供所需的参数。

关于python - TypeError:askopenfilename()缺少1个必需的位置参数:“root”在[]中:,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41741964/

10-12 18:11