Python | PyQtGraph PyQt上でドット絵表示(はぐれメタル)

PyQtGraph

Python PyQtGraph PyQt上で はぐれメタル のドット絵を表示する方法を説明する。

完成イメージ

コード

  1. GraphicsLayoutWidgetのインスタンスを生成する。
  2. 画像を生成する。
  3. プロットを生成する。
  4. プロットに画像を追加する。
  5. 画像を上下反転する。
  6. 画像のアスペクト比を固定に設定する。
#!/usr/bin/env python3

import sys
from PyQt6.QtWidgets import QApplication, QWidget
import pyqtgraph as pg
import haguremetal


class GuiWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.画像を描画する()

    def 画像を描画する(self):
        self.graph = pg.GraphicsLayoutWidget(show=True)         # 1
        self.img = pg.ImageItem(haguremetal.はぐれメタルの画像())  # 2
        self.p = self.graph.addPlot()                           # 3
        self.p.addItem(self.img)                                # 4
        self.p.getViewBox().invertY(True)                       # 5
        self.p.getViewBox().setAspectLocked(True)               # 6

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = GuiWindow()
    sys.exit(app.exec())

はぐれメタルの画像データはhaguremetal.pyというファイルに持っている。

import numpy as np


def はぐれメタルの画像():
    w = 255
    g = 155
    d = 111
    k = 0
    はぐれメタル = np.array(
        [
        [k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k], # 5
        [k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,k,k,k,k,k,k,k,k,g,g,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,g,k,k,k,k,k,k,k,g,g,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k], # 10
        [k,k,k,k,g,g,g,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,g,k,k,k,k,k,k,k,k,k,k,k,k,k,g,k,k,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,g,g,g,k,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,k,k,k,k,k,g,k,k,k,k,k,k,k,k,g,k,k,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,g,g,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k], # 15
        [k,k,k,k,k,g,g,k,k,k,k,k,k,k,d,d,d,d,k,k,k,k,g,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,k,k,k,k,g,k,k,k,d,d,d,d,d,d,w,k,k,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,k,k,k,k,k,k,k,d,d,w,d,w,d,d,w,w,k,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,k,k,k,k,k,k,d,d,w,k,w,k,w,d,d,w,w,d,d,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,k,k,k,k,d,d,d,d,d,w,d,w,d,d,d,d,d,d,d,g,d,d,k,k,k,k,k], # 20
        [k,k,k,k,k,k,k,d,g,d,d,d,k,d,d,d,d,d,k,d,d,d,d,g,g,g,d,d,k,k,k,k],
        [k,k,k,k,k,d,d,g,g,g,d,d,d,k,k,k,k,k,d,d,d,d,d,d,d,d,d,d,k,k,k,k],
        [k,k,k,k,k,k,k,d,d,d,d,g,d,d,d,d,d,d,d,d,d,d,d,d,d,d,k,k,k,k,k,k],
        [k,k,k,k,k,k,d,d,d,d,g,g,g,d,d,d,d,d,d,d,d,d,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,k,k,d,d,d,d,d,d,d,d,d,d,d,k,k,k,k,k,k,k,k,k,k,k,k,k,k], # 25
        [k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k], # 30
        [k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k],
        [k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k]
        ]).transpose()

    return はぐれメタル

まとめ

Python PyQtGraph PyQt上で はぐれメタル のドット絵を表示する方法を説明した。

コメント