Python 3.5 - Tkinter使用文件名+路径的变量

时间:2016-08-07 22:14:15

标签: python python-3.x combobox tkinter

我有一个组合框,总是设置两个变量
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文件名来测试代码时,它可以正常工作,所以它似乎是一个问题,要么无法使用文件名变量,要么我的语法不正确。

2 个答案:

答案 0 :(得分:1)

tkinter Stringvar不是python字符串。要返回Stringvar的值,请使用variable.get()

由于path不是字符串,因此您无法为其添加字符串,请添加path.get() + ...。如果输入的tye路径不存在会发生什么? progrsm会崩溃吗?

答案 1 :(得分:0)

pathStringVar个对象,您正在尝试向其添加/

不是尝试定义关键字参数,而是传递StringVar个对象(pathlinkname)并在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个对象中包含的字符串值。