PyQt4でQStringを作成する方法は?
-
05-07-2019 - |
質問
>>> from PyQt4 import QtCore
>>> str = QtCore.QString('Hello')
AttributeError: 'module' object has no attribute 'QString'
>>> QtCore.QString._init_(self)
AttributeError: 'module' object has no attribute 'QString'
はい、 QStringクラスリファレンス
を読みましたドキュメントで指定されているように、 QtCore
から QString
をインポートできないのはなぜですか?
解決
In [1]: from PyQt4 import QtCore
In [2]: s = QtCore.QString('foo')
In [3]: s
Out[3]: PyQt4.QtCore.QString(u'foo')
他のヒント
Python 3では、QStringはデフォルトでネイティブPython文字列に自動的にマッピングされます:
QStringクラスは、Python文字列との間で自動的に変換されるマッピングされた型として実装されます。さらに、Noneはnull QStringに変換されます。ただし、null QStringは空のPython文字列に変換されます(Noneではありません)。 (これは、Qtが空のQStringを返す可能性がある場合に、null QStringを返すことが多いためです。)
QCharクラスとQStringRefクラスは、Python文字列との間で自動的に変換されるマップ型として実装されます。
QStringListクラスは、Pythonの文字列リストとの間で自動的に変換されるマップ型として実装されます。
QLatin1Char、QLatin1String、およびQStringMatcherクラスは実装されていません。
Python3のPyQt4 4.6以降ではQStringは存在せず、通常のPython3ユニコードオブジェクト(文字列リテラル)を使用することになっています。これを実行して、コードがPython 2.xとPython 3.xの両方で動作するようにするには、次のようにします。
try:
from PyQt4.QtCore import QString
except ImportError:
# we are using Python3 so QString is not defined
QString = type("")
ユースケースによっては、この単純なハックで逃げることができます。
それはインポートステートメントに依存します。
書く場合
from PyQt4 import QtGui, QtCore
QStringを呼び出す必要があります
yourstr = QtCore.QString('foo')
これを書いたと思う:
from PyQt4.QtGui import *
from PyQt4.QtCore import *
これは実際には推奨されませんが、次のようにStringを呼び出す必要があります。
yourstr = QString('foo')