AttributeError: 'QString' object has no attribute 'rfind'

AttributeError: 'QString' object has no attribute '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

谁能告诉我这个错误的可能原因是什么?让我知道您是否需要任何其他代码部分。提前致谢。

pyqt 第一次包装 Qt 时,他们保留了 QString class 而不是将其转换为原生 python 字符串(即 str).大多数对字符串进行操作的 python 库(如 os.path)期望 strunicode 对象,而不是 QString。这意味着您必须不断地对 pyqt

中的所有 return 值进行类型转换
text = unicode(mywidget.text())

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

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

还有一些对象 newer api's