Comment créer QString dans PyQt4?
-
05-07-2019 - |
Question
>>> 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'
Oui, j'ai lu Référence de la classe QString
Pourquoi ne puis-je pas importer QString
à partir de QtCore
, comme spécifié dans la documentation?
La solution
In [1]: from PyQt4 import QtCore
In [2]: s = QtCore.QString('foo')
In [3]: s
Out[3]: PyQt4.QtCore.QString(u'foo')
Autres conseils
En Python 3, QString est automatiquement mappé sur la chaîne Python native par défaut:
La classe QString est implémentée en tant que type mappé qui est automatiquement converti en chaîne Python. De plus, aucun est converti en une chaîne QString nulle. Cependant, une chaîne QString nulle est convertie en une chaîne Python vide (et non aucune). (C’est parce que Qt renvoie souvent une chaîne QString nulle alors qu’il devrait probablement renvoyer une chaîne QString vide.)
Les classes QChar et QStringRef sont implémentées en tant que types mappés qui sont automatiquement convertis vers et à partir de chaînes Python.
La classe QStringList est implémentée en tant que type mappé qui est automatiquement converti vers et à partir des listes de chaînes Python.
Les classes QLatin1Char, QLatin1String et QStringMatcher ne sont pas implémentées.
D'après PyQt4 4.6+ en Python3, QString n'existe pas et vous êtes censé utiliser des objets Unicode Python3 ordinaires (littéraux de chaîne). Pour ce faire, afin que votre code fonctionne à la fois dans Python 2.x ET Python 3.x, vous pouvez effectuer les opérations suivantes:
try:
from PyQt4.QtCore import QString
except ImportError:
# we are using Python3 so QString is not defined
QString = type("")
En fonction de votre cas d'utilisation, vous pourriez vous en tirer avec ce simple piratage.
Cela dépend de votre déclaration d'importation.
Si vous écrivez
from PyQt4 import QtGui, QtCore
vous devez appeler QString avec
yourstr = QtCore.QString('foo')
Je pense que vous avez écrit ceci:
from PyQt4.QtGui import *
from PyQt4.QtCore import *
Ce n'est pas vraiment recommandé, mais vous devriez appeler String avec:
yourstr = QString('foo')