Seite 1 von 1
Write File Fehldermeldung (getSaveFileName)
Verfasst: Samstag 19. April 2014, 14:57
von machupicchu
Hi bekomme folgende Fehlermeldung:
TypeError: coercing to Unicode: need string or buffer, tuple found
Mein Code sieht wie folgt aus:
Code: Alles auswählen
def saveFile(self):
file_name = QFileDialog.getSaveFileName(self, 'Save File', '.')
f_name = open(file_name, 'w')
f_name.write("Hellloo")
f_name.close()
Habe ja zum Beispiel als String "Helloo" und müsste doch eigentlich gehen?
Re: Write File Fehldermeldung (getSaveFileName)
Verfasst: Samstag 19. April 2014, 15:03
von EmaNymton
Die Fehlermeldung ist recht eindeutig. getSaveFileName gibt keinen String zurück sondern ein Tuple, in dem das erste Element der String ist.
Re: Write File Fehldermeldung (getSaveFileName)
Verfasst: Samstag 19. April 2014, 15:07
von cofi
So eindeutig ist es nicht, da die Dokumentation von einem QString als Rueckgabewert redet.
Darum ist es wichtig, dass du den kompletten Traceback oder ein reproduzierbares Beispiel lieferst. Am Besten beides.
Re: Write File Fehldermeldung (getSaveFileName)
Verfasst: Samstag 19. April 2014, 15:09
von EmaNymton
Welche Doku? Die von PySide sagt, dass ein Tuple der Form (fileName, selectedFilter) zurückgegeben wird:
http://pyside.github.io/docs/pyside/PyS ... veFileName
Bei den Dialogbeispielen ist es ebenso:
https://qt.gitorious.org/pyside/pyside- ... dialogs.py
Re: Write File Fehldermeldung (getSaveFileName)
Verfasst: Samstag 19. April 2014, 15:14
von BlackJack
@cofi: Die Fehlermeldung ist trotzdem eindeutig, die Methode hat ganz offensichtlich ein Tupel zurückgegeben.
Das sie einen `QString` zurück gibt steht auch nur in der Dokumentation für C++. In der Dokumentation zur Python-Anbindung steht zu C++-Methoden die neben dem Rückgabewert auch ”out”-Parameter in Form von Zeigern haben, dass die in Python ein Tupel mit allen Rückgabewerten als Rückgabewert haben.
Re: Write File Fehldermeldung (getSaveFileName)
Verfasst: Samstag 19. April 2014, 15:25
von machupicchu
Mein Problem ist, dass ich ein
eld habe und möchte die Daten darin als File abspeichern.
Code: Alles auswählen
filename = QFileDialog.getSaveFileName(self, 'Save File', '.')
fname = open(filename, 'w')
fname.write(self.text_area.text)
fname.close()
Habe das mit dem tuple nicht verstanden.
Re: Write File Fehldermeldung (getSaveFileName)
Verfasst: Samstag 19. April 2014, 15:31
von BlackJack
@machupicchu: Die Methode gibt ein Tuple zurück, also keine einzelne Zeichenkette. Der Name `filename` ist also irreführend.
Re: Write File Fehldermeldung (getSaveFileName)
Verfasst: Samstag 19. April 2014, 15:34
von machupicchu
Wie kann ich das problem lösen.
Vlt
, um auf das erste element zuzugreifen?
Re: Write File Fehldermeldung (getSaveFileName)
Verfasst: Samstag 19. April 2014, 15:36
von EmaNymton
Ja, würde gehen, aber filename hat dann eine falsche Bedeutung, da es eben nicht nur ein filename ist. Du solltest direkt die Werte des Tupels unter zwei Variablen speichern:
Code: Alles auswählen
filename, filters = QFileDialog.getSaveFileName(self, 'Save File', '.')
Und
dürfte dir auch um die Ohren fliegen, da es wenn überhaupt ein Methodenaufruf sein müsste, also
aber ein QTextEdit-Objekt keine solche Methode hat. Entweder nimmst du statt dem QTextEdit ein QLineEdit oder holst dir den Text über die document()-Methode des QTextEdit-Objekts.
Re: Write File Fehldermeldung (getSaveFileName)
Verfasst: Samstag 19. April 2014, 15:38
von cofi
PyQt gibt dabei nur einen QString zurueck und haelt sich an die C++ Dokumentation.
Und schon sind wir wieder bei Uneindeutigkeiten ...
Da wir immernoch weder vollstaendigen Code noch vollstaendigen Code haben, koennen _wir_ nur raten.
Klar: Die Fehlermeldung ist eindeutig.Aber woher sie kommt ist reichlich unklar ...
Re: Write File Fehldermeldung (getSaveFileName)
Verfasst: Samstag 19. April 2014, 15:42
von EmaNymton
@cofi: Du hast recht, war mir jetzt auch nicht bewusst, dass es hierbei Unterschiede gibt. Da aber vorherige Threads von machupicchu auf ein Arbeiten mit PySide schließen lassen, habe ich in der dortigen Doku nachgeguckt.
Re: Write File Fehldermeldung (getSaveFileName)
Verfasst: Samstag 19. April 2014, 15:43
von machupicchu
Danke!
Habe jetzt
verwendet. Funzt ganz gut. Many thanks