我有一个组合框,总是设置两个变量
1)是文件名(.csv)
2)是文件路径位置
根据组合框中选择的内容,将特定的.csv文件分配给变量csvfilename
,并将路径分配给path
我尝试将这些变量提供给以下代码,以便从固定文件位置加载某些文件。
with open(csvfilename) as csvfile:
和
self.DwgOutputBox.tag_bind("dwg", "<ButtonRelease-1>", lambda event, filename=path + '/' + linkname: subprocess.run(filename, shell=True))
然而,我得到了一个
使用PATH变量进行测试时发出"TypeError: unsupported operand type(s) for +: 'StringVar' and 'str'"
消息
和
尝试使用csv变量时 with open(csvfilename) as csvfile: TypeError: invalid file: tkinter.StringVar object at 0x024F4F50
。
当我通过自己设置路径和csv文件名来测试代码时,它可以正常工作,所以它似乎是一个问题,要么无法使用文件名变量,要么我的语法不正确。
答案 0 :(得分:1)
tkinter Stringvar不是python字符串。要返回Stringvar的值,请使用variable.get()
由于path
不是字符串,因此您无法为其添加字符串,请添加path.get() + ...
。如果输入的tye路径不存在会发生什么? progrsm会崩溃吗?
答案 1 :(得分:0)
path
是StringVar
个对象,您正在尝试向其添加/
。
不是尝试定义关键字参数,而是传递StringVar
个对象(path
和linkname
)并在lambda
中获取其值 :
self.DwgOutputBox.tag_bind(
"dwg", "<ButtonRelease-1>",
lambda event, path=path, linkname=linkname: subprocess.run(
os.path.join(path.get(), linkname.get()), shell=True))
path.get()
调用检索StringVar
对象的当前值。我使用os.path.join()
而不是手动连接,因此您的代码也适用于路径分隔符不是/
的操作系统。
您必须为with open(...)
电话做类似的事情;检索 StringVar
个对象中包含的字符串值。