我的应用程序在一台计算机上运行良好,但是当我在另一台计算机上运行相同的应用程序时,我收到错误:
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
有人可以告诉可能导致此错误的原因是什么?如果您需要任何其他代码,请告诉我。提前谢谢。
答案 0 :(得分:2)
当pyqt
首次包装Qt
时,它们保留QString
类而不是将其强制转换为本机python字符串(即str
)。对字符串(例如os.path
)进行操作的大多数python库都需要str
或unicode
个对象,而不是QString
。这意味着您必须始终键入来自pyqt
text = unicode(mywidget.text())
幸运的是,pyqt
有更新版本的api,可以自动为您进行类型转换。你只需告诉它使用更新的api。在python代码的开头,在执行任何其他导入之前,您可以执行此操作
import sip
sip.setapi('QString', 2)
对于许多对象也有newer api's。