AttributeError:' QString'对象没有属性&rffind'

时间:2016-05-16 20:52:43

标签: macos python-2.7 pyqt4 qstring

我的应用程序在一台计算机上运行良好,但是当我在另一台计算机上运行相同的应用程序时,我收到错误:

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'数据类型,我正在这样做。有错误的脚本部分是:

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

有人可以告诉可能导致此错误的原因是什么?如果您需要任何其他代码,请告诉我。提前谢谢。

1 个答案:

答案 0 :(得分:2)

pyqt首次包装Qt时,它们保留QString类而不是将其强制转换为本机python字符串(即str)。对字符串(例如os.path)进行操作的大多数python库都需要strunicode个对象,而不是QString。这意味着您必须始终键入来自pyqt

的所有返回值
text = unicode(mywidget.text())

幸运的是,pyqt有更新版本的api,可以自动为您进行类型转换。你只需告诉它使用更新的api。在python代码的开头,在执行任何其他导入之前,您可以执行此操作

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

对于许多对象也有newer api's