QGraphicsSceneでグリッドを描画する
線を格子状に描くことで。
成果物
窓を広げると勝手に中央へ描画された。
コード
main.py
#!/usr/bin/python3 # -*- coding: utf-8 -*- import sys from PySide2 import QtCore, QtGui, QtWidgets class GraphicView(QtWidgets.QGraphicsView): def __init__(self): QtWidgets.QGraphicsView.__init__(self) self.setWindowTitle("QGraphicsScene draw Grid") self.setScene(GridScene()) class GridScene(QtWidgets.QGraphicsScene): def __init__(self, *args, **kwargs): super(self.__class__, self).__init__(*args, **kwargs) self.size = 16 self.scale = 32 self.setSceneRect(0, 0, self.size*self.scale, self.size*self.scale) def drawBackground(self, painter, rect): background_brush = QtGui.QBrush( QtGui.QColor(255,255,255), QtCore.Qt.SolidPattern) painter.fillRect(rect, background_brush) lines = [] for y in range(self.size+1): lines.append(QtCore.QLineF(0, y*self.scale, self.size*self.scale, y*self.scale)) for x in range(self.size+1): lines.append(QtCore.QLineF(x*self.scale, 0, x*self.scale, self.size*self.scale)) painter.drawLines(lines) if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) widget = GraphicView() widget.show() sys.exit(app.exec_())
python3 main.py
情報源
- https://www.qtcentre.org/threads/5609-Drawing-grids-efficiently-in-QGraphicsScene
- https://doc.qt.io/qt-5/qtwidgets-graphicsview-basicgraphicslayouts-example.html
- QGraphicsView
- QGraphicsScene
- QGraphicsItem
- QRect
所感
ドット絵エディタっぽい。でもまだ描画できない。ただグリッドを表示しただけ。先は長い。
対象環境
- Raspbierry pi 4 Model B
- Raspbian buster 10.0 2019-09-26 ※
- bash 5.0.3(1)-release
$ uname -a Linux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux