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 gldhgrmtl


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(gldhgrmtl.ゴールデンはぐれメタルの画像())  # 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())

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

import numpy as np


def ゴールデンはぐれメタルの画像():
    w = [255, 255, 255]
    g = [255, 255,   0]
    d = [199, 199,   0]
    k = [  0,   0,   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(1,0,2)

    return ゴールデンはぐれメタル

まとめ

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

コメント