2016-05-16 10 views
0

私のアプリケーションは、1台のコンピュータで細かい実行されますが、私は別で同じアプリケーションを実行すると、私はエラーを取得する:は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

が最初にラップされたときには、のネイティブのPython文字列にキャストする代わりにQStringクラスを保持していました。文字列で動作するほとんどのPythonライブラリ(os.pathなど)は、QStringではなく、strまたはunicodeのオブジェクトを想定しています。これはpyqtが自動的に型がキャスト行うAPIの新しいバージョンを持っている、あなたは常に幸いpyqt

text = unicode(mywidget.text()) 

からすべての戻り値をキャスト入力する必要があることを意味します。新しいAPIを使うように伝えるだけでいいです。あなたが他の輸入を行う前に、あなたのPythonコードの開始時に、あなたにもオブジェクトの数のために、この

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

ありnewer api'sを行うことができます。

関連する問題