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