2016-05-16 8 views
0

Мое приложение работает отлично в одном компьютере, но когда я запускаю того же приложения в другое, я получаю ошибку:AttributeError: объект «QString» не имеет атрибута «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' 

я видел подобную ошибку here , В соответствии с этим, мне нужно типаж параметр для типа данных «» QString и я делаю that.The часть сценария, который испытывает ошибки:

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 

Может кто-то пожалуйста, скажите, что может быть возможной причиной этой ошибки ? Сообщите мне, нужна ли вам какая-либо другая часть кода. Заранее спасибо.

+0

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

+0

Большое спасибо. Это заставило код работать отлично. Если возможно, можете ли вы сообщить мне, в чем причина ошибки? –

+0

Причина в том, что этот объект не имеет этого атрибута. –

ответ

2

Когда pyqt первый завернутые Qt, они держали QString класс вместо приведения его в родные строки Python (то есть. str). Большинство библиотек python, которые работают с строками (например, os.path), ожидают str или unicode объектов, а не QString. Это означает, что вы должны постоянно типовому отливка все возвращаемые значения из pyqt

text = unicode(mywidget.text()) 

К счастью, pyqt имеет новые версии API, которые автоматически делают вид литья для вас. Вам просто нужно сказать ему, чтобы использовать новую api. В начале вашего кода питона, прежде чем делать какие-либо другие импорта, вы можете сделать это

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

Есть newer api's для ряда объектов, а также.