Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python AttributeError:StringVar实例没有属性';结束于';在尝试通过Tkinter按钮呼叫时_Python_Python 2.7_User Interface_Tkinter_Glob - Fatal编程技术网

Python AttributeError:StringVar实例没有属性';结束于';在尝试通过Tkinter按钮呼叫时

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)

我想创建一个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):
  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('/'):
    ...