Ответ 1
In [1]: from PyQt4 import QtCore
In [2]: s = QtCore.QString('foo')
In [3]: s
Out[3]: PyQt4.QtCore.QString(u'foo')
>>> 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
Почему я не могу импортировать QString
из QtCore
, как указано в документах?
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 преобразуется в нуль QString. Однако нулевое значение QString преобразуется в пустую строку Python (а не None). (Это потому, что Qt часто возвращает нулевой QString, когда он, вероятно, должен возвращать пустой QString.)
Классы QChar и QStringRef реализуются как сопоставленные типы, которые автоматически преобразуются в строки Python и из них.
Класс QStringList реализуется как сопоставленный тип, который автоматически преобразуется в списки строк Python строк и из них.
Классы QLatin1Char, QLatin1String и QStringMatcher не реализованы.
Из PyQt4 4.6+ в Python3 QString не существует, и вы должны использовать обычные объекты Unicode 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')