【问题标题】:PyQt Qstring not accepted when script run from WIndows command line, why?从 WINdows 命令行运行脚本时不接受 PyQt Qstring,为什么?
【发布时间】:2015-06-14 18:54:03
【问题描述】:

在 x64 机器上使用 PyQt 4、Python 2.7、Windows 7。

我一直在使用带有 PyQt4 的 Python 控制台开发一些代码,并将字符串从 QLineEdit() 小部件传递到操作系统命令,使用 os.system(cmd) 没有问题

但是当我尝试在 Windows 中从命令行运行时,出现以下错误,

TypeError:序列项 0:预期字符串,找到 QString

我通过str(cmd) 转换有问题的字符串来解决这个问题,但这让我很好奇,为什么这只会在从命令行调用代码时发生,而不是在 Python 控制台中调用时发生?

【问题讨论】:

  • 您使用的是哪个 python 控制台?蟒蛇?普通蟒蛇?
  • 一个普通的 Python 控制台。

标签: python windows command-line pyqt4 qstring


【解决方案1】:

我不确定为什么会发生这种情况(假设您只是使用标准 Python 控制台),但可以配置 PyQt 方法以返回 Python 字符串而不是 QStrings。我怀疑您的 Python 控制台正在执行此操作,但您的脚本不是。同样,我真的不明白为什么普通的 python 控制台会自动执行此操作,除非我们对普通 python 控制台的定义有所不同(通过普通控制台,我的意思是从终端运行 python.exe)。然而,这是我唯一没有让你在控制台中实际运行不同代码而没有意识到的解释。

所以,PyQt documentation 介绍了如何使用 sip 模块禁用 QStrings。您只需导入 PyQt4 之前执行此操作。

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

如果您在 Python 脚本中执行此操作,那么您应该在控制台和命令行之间获得相同的行为。

您也可以执行类似的操作来禁用 QVariant 和其他在 Python 中通常毫无意义的烦人 Qt 类型。

【讨论】:

    【解决方案2】:

    我认为出现这个问题是因为命令行参数实际上是字节数组而不是字符串,字符串是用 Unicode 编码的,但字节数组不是。调用str(cmd)cmd的内容作为字符串返回。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-17
      • 2012-02-14
      • 2017-01-01
      • 2016-06-15
      • 2011-01-18
      • 2017-12-07
      相关资源
      最近更新 更多