我想变dirpath传递到export_data()函数。 出口数据关在位于上的小工具按钮双击运行。 为什么dirpath印刷为:
`<Tkinter.Event instance at 0x8ade56c>`
而不是实际的路径?
def export_data(dirpath):
print 'exporting...'
print str(dirpath)
os.mkdir('/home/bigl/Desktop/Library')
shutil.copytree(dirpath, output_path)
当我运行我的代码,我得到的错误
exporting...
<Tkinter.Event instance at 0x8ade56c>
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__
return self.func(*args)
File "/media/LOFTUS/20130308_searchtest.py", line 44, in export_data
shutil.copytree(dirpath, output_path)
File "/usr/lib/python2.7/shutil.py", line 169, in copytree
names = os.listdir(src)
TypeError: coercing to Unicode: need string or buffer, instance found
在你问的问题的身体:
出口数据关在位于上的小工具按钮双击运行。 为什么dirpath印刷为:
<Tkinter.Event instance at 0x8ade56c>
在绑定到一个事件时,总是结合发送事件对象作为参数到绑定函数。 所以,如果你正在做的:
widget.bind("<Double-1>", export_data)
......然后export_data
,因为它是唯一的参数会收到该事件。
传递变量,你需要使用lambda
或functools.partial
或某种函数发生器。 例如:
widget.bind("<Double-1>", lambda event: export_data(dirpath))
小心这一点,但是。 传递给值export_data
将是价值dirpath
在事件发生的时候 ,当你创建结合可能比的值不同。
如果您有要传递给函数的局部变量,你可以将其设置为默认值的关键字参数,在这种情况下,在时间值lambda
创建将被传递。
例:
path = some_function()
widget.bind("<Double-1>", lamba event, dirpath=path: export_data(dirpath))
很明显Tkinter
将一个事件,而不是一个字符串,你的回调。 如果dirpath
是一个全局变量(如!你写before--重要信息),也许你的意思是这样定义你的回调:
def export_data(_ignored):
print 'exporting...'
print str(dirpath)
os.mkdir('/home/bigl/Desktop/Library')
shutil.copytree(dirpath, output_path)
现在你的函数可以使用全局dirpath
(和output_path
)。 你有它的方式,论证申报的藏身之全球的同名。