mieki256's diary



2016/10/30() [n年前の日記]

#2 [python] PySideでファイルオープンダイアログを表示したり等

PySideをまだ勉強中。

ファイルオープンダイアログとファイル保存ダイアログ。 :

こんな感じで書けば、ファイルオープンダイアログ、ファイル保存ダイアログが開くらしい。
    def show_open_dialog(self):
        u"""ファイルオープンダイアログを表示."""
        filter = "Image Files (*.png *.bmp *.jpg *.jpeg)"
        fpath, _ = QFileDialog.getOpenFileName(self, "Open File", self.cur_dir, filter)
        if fpath:
            self.gview.load_canvas_image(fpath)
        else:
            # cancel
            pass

    def show_save_dialog(self):
        u"""ファイル保存ダイアログを表示."""
        filter = "Image Files (*.png)"
        fpath, _ = QFileDialog.getSaveFileName(self, "Save File", self.cur_dir, filter)
        if fpath:
            self.gview.scene().save_canvas(fpath)
        else:
            # cancel
            pass
キャンセルボタンが押された時は何が返ってくるのか分からなかったけど、ひょっとすると空文字列("") が返ってくるのかもしれない。

返り値を、fpath, _ で受け取ってるサンプルがあって、「『_』って何だ?」と思ったけど。タプルの返り値を受け取る際に、使わない値は「_」で受け取って捨ててしまう、みたいな何かがあるらしい。

QPixmapのファイル保存。 :

PySideで、画像の描画その他に使う QPixmap を、画像ファイルとして保存するのは、save() を使えばいいらしい。
    def save_canvas(self, fpath):
        u"""キャンバスを画像ファイルとして保存."""
        self.canvas_pixmap.save(fpath, "PNG")
引数として、ファイルパス、画像フォーマット、圧縮率を渡す模様。圧縮率の指定を省略するとデフォルトの圧縮率で保存される、と書いてあるように見えた。

_QPixmap - PySide v1.0.7 documentation

QPixmapの指定座標の色情報を取得。 :

QPixmap の指定座標からRGBA値を取得したいと思ったのだけど、QPixmap からは取得できないようで。ただし、toImage() を使って、一旦 QImage に変換してやれば、long値として取得できる模様。
    def get_rgb_from_canvas(self, pos):
        u"""キャンバスの指定座標からRGBA値 (r,g,b,a) を取得."""
        x = int(pos.x())
        y = int(pos.y())

        pm = self.canvas_pixmap
        w, h = pm.width(), pm.height()
        if x < 0 or x >= w or y < 0 or y >= h:
            return None

        argb_long = pm.toImage().pixel(x, y)

        argb = QColor()
        argb.setRgba(argb_long)
        r = argb.red()
        g = argb.green()
        b = argb.blue()
        a = argb.alpha()
        return (r, g, b, a)

取得したlong値をRGBAに変換するなら、QColor が使える。QColor.setRgba( long値 ) で long値を渡して設定してやれば、後は red()、green()、blue()、alpha() で、R,G,B,Aの値を取得できる。

long値はARGBの順で並んでるようにも見えたから、シフトとマスクで取り出せるんじゃないのとも思ったけど、仕様変更された時の対処や、OSによって並びが異なる可能性も考えると、面倒でも(?)、QColor を使ったほうがいいのかもしれない。

以上です。

過去ログ表示

Prev - 2016/10 - 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 31

カテゴリで表示

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


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

Powered by hns-2.19.6, HyperNikkiSystem Project