2016-05-16 13 views
0

Meine Anwendung läuft in einem Computer in Ordnung, aber wenn ich die gleiche Anwendung in einem anderen laufen bekomme ich den Fehler:Attribute: ‚QString‘ Objekt hat kein Attribut ‚rfind‘

Traceback (most recent call last): 
    File "./th.py", line 98, in browse_file2 
    self.textEdit_2.append(str(os.path.basename(p))) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py", line 121, in basename 
    i = p.rfind('/') + 1 
AttributeError: 'QString' object has no attribute 'rfind' 

ich einen ähnlichen Fehler here gesehen habe . Nach diesem, ich brauche Parameter auf ‚QString‘ Datentyp typisieren und ich that.The Teil Skript tue, die Fehler aufweist, ist:

def browse_file(self): 
    #files handling 


    caption="Open File" 
    directory='./' 
    filter_mask="fastq files (*.fastq)" 
    self.textEdit.setText("") 
    f_1=(QFileDialog.getOpenFileNames(None, caption, directory, filter_mask)) 
    #for st in f_1: 
    for p in f_1: 
    self.textEdit.append(str(os.path.basename(p))) 
    global R1 
    R1=f_1 

     #if textEdit.toPlainText 


def browse_file2(self): 
    #files handling 
    caption="Open File" 
    directory='./' 
    filter_mask="fastq files (*.fastq)" 
    f_2=(QFileDialog.getOpenFileNames(None, caption, directory, filter_mask)) 
    for p in f_2: 
    self.textEdit_2.append(str(os.path.basename(p))) 
    global R2 
    R2=f_2 

Kann jemand bitte sagen, was die mögliche Ursache für diesen Fehler sein kann, ? Lassen Sie es mich wissen, wenn Sie einen anderen Teil des Codes benötigen. Danke im Voraus.

+0

'os.path.basename (unicode (p))' – ekhumoro

+0

Vielen Dank. Das hat dazu geführt, dass der Code einwandfrei funktioniert. Wenn möglich, können Sie mir bitte mitteilen, was der Grund für den Fehler war? –

+0

Der Grund ist, dass dieses Objekt dieses Attribut nicht hat. –

Antwort

2

Wenn pyqt zuerst gewickelt Qt, hielt sie die QString Klasse statt es zu nativen Python Strings Casting (dh. str). Die meisten Python-Bibliotheken, die mit Strings arbeiten (wie os.path), erwarten str oder unicode Objekte, nicht QString. Dies bedeutet, dass Sie müssen ständig von allen die Rückgabewerte-Typ umgewandelt pyqt

text = unicode(mywidget.text()) 

Glücklicherweise pyqt neuere Versionen des api hat, dass der Typ-Casting für Sie automatisch. Sie müssen es nur sagen, um die neuere API zu verwenden. Zu Beginn Ihrer Python-Code, bevor Sie andere Importe tun, können Sie tun, um diese

import sip 
sip.setapi('QString', 2) 

Es gibt newer api's für eine Reihe von Objekten als auch.

Verwandte Themen