【问题标题】:AttributeError: 'QString' object has no attribute 'rfind'AttributeError:“QString”对象没有属性“rfind”
【发布时间】:2016-09-12 18:49:06
【问题描述】:

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

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

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

【问题讨论】:

  • os.path.basename(unicode(p))
  • 非常感谢。这使得代码工作得很好。如果可能,请告诉我错误的原因是什么?
  • 原因是那个对象没有那个属性。
  • @AdrianPereira。 QString 对象与 python unicode 对象不同。

标签: macos python-2.7 pyqt4 qstring


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 2012-12-01
    • 2021-04-19
    • 2023-03-08
    • 2021-11-22
    相关资源
    最近更新 更多