在x64机器上使用PyQt 4,Python 2.7,Windows 7。
我一直在使用带有PyQt4的Python控制台开发一些代码,并使用module shape_mod
type, abstract :: abstractshape
integer :: color
logical :: filled
integer :: x
integer :: y
end type abstractshape
interface abstractshape
module procedure initShape
end interface abstractshape
type, EXTENDS (abstractshape) :: shape
end type shape
type, EXTENDS (shape) :: rectangle
integer :: length
integer :: width
end type rectangle
interface rectangle
module procedure initRectangle
end interface rectangle
contains
! initialize shape objects
subroutine initShape(this, color, filled, x, y)
class(shape) :: this
integer :: color
logical :: filled
integer :: x
integer :: y
this%color = color
this%filled = filled
this%x = x
this%y = y
end subroutine initShape
! initialize rectangle objects
subroutine initRectangle(this, color, filled, x, y, length, width)
class(rectangle) :: this
integer :: color
logical :: filled
integer :: x
integer :: y
integer, optional :: length
integer, optional :: width
this%shape = shape(color, filled, x, y)
if (present(length)) then
this%length = length
else
this%length = 0
endif
if (present(width)) then
this%width = width
else
this%width = 0
endif
end subroutine initRectangle
end module shape_mod
program test_oop
use shape_mod
implicit none
! declare an instance of rectangle
type(rectangle) :: rect
! calls initRectangle
rect = rectangle(2, .false., 100, 200, 11, 22)
print*, rect%color, rect%filled, rect%x, rect%y, rect%length, rect%width
end program test_oop
但是当我尝试从Windows命令行运行时出现以下错误,
TypeError:序列项0:期望字符串,找到QString
我通过os.system(cmd)
转换有问题的字符串来解决这个问题,但这让我很好奇,为什么只有在从命令行调用代码而不是在Python控制台中调用代码时才会发生这种情况? / p>
答案 0 :(得分:2)
我不确定为什么会发生这种情况(假设你只是使用标准的Python控制台),但是可以配置PyQt方法来返回python字符串而不是QStrings
。我怀疑你的Python控制台正在这样做,但你的脚本却没有。同样,我真的不明白为什么普通的python控制台会自动执行此操作,除非我们对普通python控制台的定义有所不同(通过普通控制台我的意思是从终端运行python.exe
)。但是,这是我在控制台中实际运行不同代码而没有实现的唯一解释。
因此,PyQt documentation介绍了如何使用QStrings
模块禁用sip
。您只需 导入PyQt4。
import sip
sip.setapi('QString', 2)
如果在Python脚本中执行此操作,则应在控制台和命令行之间获得相同的行为。
您也可以执行类似的操作来禁用QVariant
以及其他令人烦恼的Qt类型,这些类型在Python中通常毫无意义。
答案 1 :(得分:-1)
我认为发生这个问题是因为命令行参数实际上是字节数组而不是字符串,字符串是用Unicode编码的,但是字节数组不是。调用str(cmd)
会将cmd
的内容作为字符串返回。