2016-08-07 13 views
-1

私は常に2つの変数
1を設定し、コンボボックスを持っているが)ファイル名です(.csv)に
2)内容に応じて、ファイルパスの場所のPython 3.5 - ファイル名の変数を使用してのTkinter +パス

ですコンボボックスで選択されている場合、特定の.csvファイルが変数csvfilenameに割り当てられ、パスがpathに割り当てられます。

固定ファイルの場所から特定のファイルをロードするためにこれらの変数を下のコードに入力しようとしています。変数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'"メッセージが出てい

with open(csvfilename) as csvfile: TypeError: invalid file: tkinter.StringVar object at 0x024F4F50 CSVファイルを使用しようと変数。

は、私は自分自身それが正しく動作パスとCSVファイル名を設定することで、コードをテストする場合、ファイル名に変数を使用することができるというか、私の構文が間違っていないのいずれかの問題であるように思われます。

答えて

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()を使用して、コードがパス区切り文字が/でないOSでも動作するようにしました。

with open(...)コールでも同様の操作を行う必要があります。含まれている文字列値StringVarオブジェクトで取得します。

+0

私はこの角度からそれを攻撃することに感謝します、あなたは返信する時間を取っていただきありがとうございます:) – LMP2016

1

tkinter StringvarはPython文字列ではありません。使用するStringvarの値を返すには

pathは文字列ではありません。path.get() + ...を入力してください。入力したタイのパスが存在しない場合はどうなりますか? progrsmはクラッシュしますか?

関連する問題