PyQt4: これから始めるなら sip.setapi('QString', 2) しよう

2011 年 8 月 27 日 はてなブックマークへ追加 はてなブックマーク - PyQt4: これから始めるなら sip.setapi('QString', 2) しよう Bookmark this on Delicious

PyCon JP の PyQt セッション で、磯 蘭水さんが仰られていた「PyQt を使うなら Python 3 がオススメ」というのは、 たぶんこのことだと思う:

この API 1 というのが曲者で、 basestring -> QString へは自動変換してくれるのだけど、

>>> lineedit = QLineEdit()
>>> lineedit.setText('http://example.net/')

逆は当然やってくれない:

>>> lineedit.text()
PyQt4.QtCore.QString(u'http://example.net/')
>>> lineedit.text().startswith('http://')
Traceback (most recent call last):
 ...
AttributeError: 'QString' object has no attribute 'startswith'
(ちなみに、 QString には startsWith() があります :)

よくはまってしまう。

なので、これから Python 2 で PyQt4 を始めるなら、迷わず API 2 を使おう。

>>> import sip
>>> sip.setapi('QString', 2)
>>> from PyQt4.QtGui import QApplication, QLineEdit
>>> app = QApplication(sys.argv)
>>> lineedit = QLineEdit()
>>> lineedit.setText('http://example.net/')
>>> lineedit.text()
u'http://example.net/'

詳しくはこの辺を参考に。 QVariant など他のクラスの話や、 Python の文字列が immutable であることの影響について説明されている。

なお、 PySide は API 2 しか実装していない。シンプルでよい。

コメント

blog comments powered by Disqus