我是python的新手。我正在构建我的第一个应用程序我的问题可能很简单,但我确实需要帮助。我有2个标签和2个按钮。
第一个按钮调用功能browse
并浏览图像文件并在标签1上设置图像。然后,第二个按钮调用功能applyBrowsedImage
并从标签1获取图像并设置它到cv2.imread,所以它可以用于图像处理。
但程序显示错误:
TypeError:期望的字符串或Unicode对象,找到QString
def browse(self, path):
filePath = QtGui.QFileDialog.getOpenFileName(self, 'a file','*.jpg')
self.path = filePath
fileHandle = open(filePath, 'r')
pixmap = QPixmap(filePath)
self.label1.setPixmap(pixmap)
def ApplyBrowsedImage(self):
##a = cv2.imread('image.jpg') it works here
a = cv2.imread(self.path) ##but does not work here
pixmap = QPixmap(a)
self.label2.setPixmap(pixmap)
print("not yet")
我对任何参考或方法持开放态度。
提前致谢。
答案 0 :(得分:0)
Qt为字符串之类的东西提供了一些自己的类型,因为Qt是一个C ++库,显然这些东西在C ++中很难。使用PyQt时,您可以选择使用Qt字符串(QString
)或Python本机字符串。旧版本的PyQt(PyQt4)默认使用QString
,因为新版本(PyQt5)使用Python字符串。
我认为最好的选择是使用本机Python类型,这使您可以轻松地与其他库相结合,这些库也需要本机Python类型而不需要进行大量烦人的转换。
为此,在导入PyQt之前 (所以将它放在你启动的python脚本的顶部),添加以下代码:
# do this BEFORE importing PyQt for the first time
import sip
for name in ["QDate", "QDateTime", "QString", "QTextStream", "QTime", "QUrl", "QVariant"]:
sip.setapi(name, 2)
# now you can import PyQt...
这确保您使用本机Python类型而不是上面列出的类型,并且您的错误将消失。