2016-08-07 66 views
-1

ich ein Kombinationsfeld haben, die immer zwei Variablen setzt
1) ist ein Dateiname (.csv)
2) ist ein DateipfadPython 3.5 - Tkinter Variablen verwenden für Dateinamen + Pfade

Je nachdem, was ist in der Auswahlliste ausgewählt, eine bestimmte CSV-Datei ist der Variablen csvfilename zugeordnet und ein Pfad ist path

zugeordnet Ich versuche, diese Variablen in den folgenden Code zu füttern, um bestimmte Dateien von einem festen Speicherort zu laden.

with open(csvfilename) as csvfile:

und

self.DwgOutputBox.tag_bind("dwg", "<ButtonRelease-1>", lambda event, filename=path + '/' + linkname: subprocess.run(filename, shell=True)) 

aber ich bin immer eine
"TypeError: unsupported operand type(s) for +: 'StringVar' and 'str'" Meldung, wenn Sie die Variable PATH

Tests mit

und ein

with open(csvfilename) as csvfile: TypeError: invalid file: tkinter.StringVar object at 0x024F4F50 beim Versuch, die csv zu verwenden Variable.

Wenn ich den Code durch Einstellen des Pfades und des csv-Dateinamens selbst überprüfe, funktioniert es richtig, so scheint es ein Problem zu sein, entweder Variablen für Dateinamen nicht verwenden zu können oder meine Syntax ist falsch.

Antwort

0

path ist ein StringVar Objekt, und Sie versuchen, / hinzuzufügen.

Anstatt zu versuchen, eine Keyword-Argument zu definieren, übergeben Sie in den StringVar Objekte (path und linkname) und ihre Werte erhalten im 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)) 

Der path.get() Anruf empfängt den aktuellen Wert des StringVar Objekt. Ich habe os.path.join() anstelle der manuellen Verkettung verwendet, damit Ihr Code auch auf einem Betriebssystem funktioniert, bei dem der Pfadtrenner nicht / ist.

Sie müssen etwas Ähnliches für den Anruf with open(...) tun; Abrufen der enthaltenen Zeichenfolgenwerte in die StringVar Objekte.

+0

danke ich werde es aus diesem Blickwinkel angreifen, schätzen Sie die Zeit nehmen zu antworten :) – LMP2016

1

A tkinter Stringvar ist keine Python-Zeichenkette. Um den Wert einer Stringvar anzugeben, verwenden Sie variable.get()

Da path keine Zeichenfolge ist, der Sie keine Zeichenfolge hinzufügen können, geben Sie path.get() + ... ein. Was passiert, wenn der eingegebene Pfad nicht existiert? Stürzt der Progrsm ab?