Python AttributeError:StringVar实例没有属性';结束于';在尝试通过Tkinter按钮呼叫时
我想创建一个GUI,它接收两个路径(一个包含.txt文档的目录和一个从前面提到的文件夹中创建的新.csv文件的目标) 调用函数Python AttributeError:StringVar实例没有属性';结束于';在尝试通过Tkinter按钮呼叫时,python,python-2.7,user-interface,tkinter,glob,Python,Python 2.7,User Interface,Tkinter,Glob,我想创建一个GUI,它接收两个路径(一个包含.txt文档的目录和一个从前面提到的文件夹中创建的新.csv文件的目标) 调用函数munge()时遇到问题: 然而,这一例外提出了: /usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /Users/user/PycharmProjects/script.py Traceback (most recent call last)
munge()
时遇到问题:
然而,这一例外提出了:
/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /Users/user/PycharmProjects/script.py
Traceback (most recent call last):
File "/Users/user/PycharmProjects/script.py", line 82, in <module>
action = tk.Button(win, text="To .csv", command=munge(input_directory,output_directory))
File "/Users/user/PycharmProjects/script.py", line 39, in munge
test = tuple(retrive(directory))
File "/Users/user/PycharmProjects/script.py", line 31, in retrive
for filename in sorted(glob.glob(os.path.join(directory_path, '*.txt'))):
File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py", line 70, in join
elif path == '' or path.endswith('/'):
AttributeError: StringVar instance has no attribute 'endswith'
Process finished with exit code 1
你想在String Valk调用<代码>。()(代码)>以获得它包含的字符串,否则它只是String Var实例。 < p>你可能想考虑在Tkinter上读取回调函数上的一点,这里是一个有用的链接,以便这样做: 对于这样的简单情况,可以使用lambda表达式作为链接 在Tkinter和回调函数之间:
一旦您的按钮小部件加载,您的函数就会被执行,您希望避免这种情况。根据错误消息,您似乎试图调用
StringVar
对象的endswith
方法。如果您查看这样一个对象的文档,您会发现没有这样的方法。这就是为什么你会犯这样的错误
假设path
是StringVar
的实例,则必须调用get
方法才能将字符串存储在对象中:
path_string = path.get()
if path_string == "" or path_string.endswith('/'):
...
毕竟,它使用的是:action=
tk.Button(win,text=“To.csv”,command=lambda:munge(input\u directory.get(),output\u directory.get())
。然而,从Bryan Oakley的回答来看,我认为这不是正确的方法。感谢您的帮助,我尝试了您的方法:action=tk.Button(win,text=“to.csv”,command=lambda:munge(input\u directory,output\u directory))
。但是,我仍然得到相同的错误,你知道为什么会发生这个问题吗?你得到的错误与你的函数有关,lambda会在你实际点击按钮而不是onload时帮助你执行你的函数。“如何通过按钮正确调用前面提到的函数”问题是,我一直在为argparse菜单使用这些函数,它们实际上工作得非常好。另一方面,当我尝试开始使用Tkinter的StringVar()
对象时,这个问题就开始了。我该怎么办?虽然你已经指出了代码中的一个bug,但被问及的并不是这个bug。哇。。。它使用了:action=tk.Button(win,text=“To.csv”,command=lambda:munge(input\u directory.get(),output\u directory.get())
。但是,我想知道这是否是正确的方法,前面的解决方案是否是解决此问题的pythonic方法?@john_doe:更好的方法是使用command=some_function
,然后让some_function
获取变量。在我看来,lambda
只有在绝对必要的情况下才应该使用。你能举个例子吗?。就为了给你赏金?
action = tk.Button(win, text="To .csv", command=lambda:munge(input_directory,output_directory))
def callback(number):
print "button", number
Button(text="one", command=lambda: callback(1))
path_string = path.get()
if path_string == "" or path_string.endswith('/'):
...