在x64机器上使用PyQt 4、python2.7、windows7。在
我一直在使用PyQt4的Python控制台开发一些代码,并使用os.system(cmd)
将字符串从QLineEdit()小部件传递到OS命令
但是当我在Windows中尝试从命令行运行时,我得到了以下错误
TypeError: sequence item 0: expected string, QString found
我通过str(cmd)
转换有问题的字符串来解决这个问题,但这让我很好奇,为什么只有在从命令行调用代码时才会发生这种情况,而不是在Python控制台中调用时才会发生这种情况?在
我认为出现这个问题是因为命令行参数实际上是字节数组而不是字符串,字符串是用Unicode编码的,而字节数组不是。调用
str(cmd)
将cmd
的内容作为字符串返回。在我不确定为什么会发生这种情况(假设您只是使用标准的Python控制台),但是可以将PyQt方法配置为返回Python字符串,而不是
QStrings
。我怀疑您的Python控制台正在执行此操作,但您的脚本没有。同样,我真的不明白为什么普通的python控制台会自动这么做,除非我们对普通python控制台的定义有所不同(对于普通控制台,我的意思是只从终端运行python.exe
)。然而,这是我唯一缺少的解释,你实际上在控制台中运行不同的代码却没有意识到。在因此,PyQt documentation介绍了如何使用
sip
模块禁用QStrings
。只需在导入PyQt4之前。在如果在Python脚本中执行此操作,那么控制台和命令行之间的行为应该是相同的。在
您还可以执行类似的操作来禁用
QVariant
和其他恼人的Qt类型,这些类型在Python中通常是没有意义的。在相关问题 更多 >
编程相关推荐