2016-05-16 114 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)預計爲strunicode對象,而不是QString的。這意味着,你必須不斷從pyqt

text = unicode(mywidget.text()) 

幸運到類型轉換所有的返回值,pyqt有API的新版本,可以自動做類型轉換爲您服務。你只需要告訴它使用更新的API。在你的Python代碼開始時,你做任何其他進口之前,您可以爲多個對象做到這一點

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

newer api's爲好。

相關問題