mieki256's diary



2016/11/25(金) [n年前の日記]

#1 [python] PySideとPyQt4を両方入れているとImageQtがエラーを出す問題

PySide を使って書いていたスクリプトが、エラーを出すようになって悩んだり。

Pillow(PIL)の ImageQt を使うと、PIL の Image を PySide の QImage に変換できる、はずなのだけど、何故か該当行でエラーが出てしまって。こないだまで動いてたのに変だな変だなと。

考えてみたら、各種サンプルを動かすために PyQt4 をインストールしてから、この症状が出始めたような…。試しに PyQt4 をアンインストールしてみたら、エラーが出なくなった。

以下のページで、同様の不具合報告と回答があった。

_python - cannot use imageQt to cast Image to QImage - Stack Overflow

PIL の ImageQt は、PyQt を使ってることを前提に書かれているので、PySide と PyQt の両方が入ってる環境では PyQt のほうを優先して使おうとして、PySide を使ったスクリプトではエラーが出てしまうらしい。

一行入れると問題回避できるかも、と書いてあったので試してみたり。
u"""
Pillow(PIL)のImageQtについて動作確認.

動作確認 : Windows10 x64 + Python 2.7.12 + PySide 1.2.4
"""

from PySide import QtGui
import sys
from PySide.QtCore import *  # NOQA
from PySide.QtGui import *   # NOQA
sys.modules['PyQt4.QtGui'] = QtGui   # PyQt4を使わないようにしている
from PIL import Image
from PIL import ImageQt


class MyWidget(QWidget):

    """main window."""

    def __init__(self, *argv, **keywords):
        """init."""
        super(MyWidget, self).__init__(*argv, **keywords)
        img = Image.open("./tmp_00_default.png")
        img = img.convert("RGBA")
        qimg = ImageQt.ImageQt(img)
        pm = QPixmap.fromImage(QImage(qimg))

        lbl = QLabel(self)
        lbl.setPixmap(pm)
        self.setLayout(QVBoxLayout())
        self.layout().addWidget(lbl)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWidget()
    w.show()
    sys.exit(app.exec_())

たしかに、1行入れてみたらエラーが出なかった。とメモ。

以上です。

過去ログ表示

Prev - 2016/11 - Next
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project