2016-08-07 3 views
-1

у меня есть поле со списком, который всегда ставит перед собой две переменные
1) является имя файла (CSV)
2) является местом путь к файлуPython 3.5 - Tkinter Использование переменных для имен файлов + путей

В зависимости от того, что выбранный в поле со списком, конкретный 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)) 

однако я получаю сообщение
"TypeError: unsupported operand type(s) for +: 'StringVar' and 'str'" при тестировании с использованием PATH переменной

и

with open(csvfilename) as csvfile: TypeError: invalid file: tkinter.StringVar object at 0x024F4F50 при попытке использовать CSV переменная.

Когда я тестирую код, устанавливая путь и имя файла csv, он работает правильно, поэтому проблема заключается в том, что вы не можете использовать переменные для имен файлов, или мой синтаксис неверен.

ответ

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)) 

The path.get() вызов возвращает текущее значение StringVar объект. Я использовал os.path.join() вместо ручной конкатенации, чтобы ваш код также работал на ОС, где разделитель путей не /.

Вам нужно будет сделать что-то подобное для звонка with open(...); получить строковые значения, содержащие вStringVar объектов.

+0

спасибо Я атакую ​​его с этого угла, ценю, что вы нашли время ответить :) – LMP2016

1

tkinter Stringvar не является строкой python. Чтобы вернуть значение STRINGVAR использовать variable.get()

Поскольку path не является строкой, вы не можете добавить строку к нему, положил path.get() + .... Что произойдет, если введенный путь tye не существует? Происходит ли авария?