我正在尝试编写一个代码,使用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的新手,非常感谢任何帮助。
答案 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)