2015-06-14 59 views
1

在x64機器上使用PyQt 4,Python 2.7,Windows 7。當腳本從WIndows命令行運行時,PyQt Qstring不被接受,爲什麼?

我一直在使用與PyQt4的Python的控制檯和QLineEdit的傳遞字符串()小部件OS開發一些代碼使用os.system(cmd)

沒有發出命令,但是當我試圖從Windows中我的命令行運行收到以下錯誤,

TypeError: sequence item 0: expected string, QString found

我通過str(cmd)解決此得到通過將違規字符串,但它給我留下了很好奇,爲什麼發生這種情況只有在代碼從從命令行調用,而不是在內部調用一個Python控制檯?

+0

你使用哪個python控制檯? IPython的?正常的Python? –

+0

一個普通的Python控制檯。 – DrBwts

回答

-1

我認爲發生這個問題是因爲命令行參數實際上是字節數組而不是字符串,字符串是用Unicode編碼的,但字節數組不是。調用str(cmd)將字符串cmd的內容返回。

2

我不確定爲什麼會發生這種情況(因爲您只是使用標準的Python控制檯),但可以配置PyQt方法來返回python字符串而不是QStrings。我懷疑你的Python控制檯是這樣做的,但你的腳本不是。再次,我真的不明白爲什麼普通的python控制檯會自動執行此操作,除非我們定義的普通python控制檯在某種程度上是不同的(通過普通控制檯,我的意思是從終端運行python.exe)。但是,這是我沒有實際在控制檯中運行不同代碼而沒有意識到的唯一解釋。

因此,PyQt documentation涵蓋了如何使用sip模塊禁用QStrings。您只需在導入PyQt4之前之前執行

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

如果你在你的Python腳本中這樣做,那麼你應該在控制檯和命令行之間獲得相同的行爲。

你也可以做類似的事情來禁用QVariant和其他煩人的Qt類型,這些類型在Python中通常是毫無意義的。