
どうも!たっくんです!
またまた続いて、「QPainter」を見ていきたいと思います!今回は、「色々な図形を描く方法」を見ていきたいと思います!!(`・ω・´)ゞ
図形の描画
塗りつぶしの設定は「setBrush」、線の設定は「setPen」は、「QPainter.drawRectの使い方!!」でご紹介した方法と一緒です!描画したいものによって、メソッドを使い分けると様々な図形を描くことができます!
円弧(drawArc)
指定したエリアに「startAngle」「spanAngle」によって定義される弧を描画します。

from PySide import QtCore, QtGui class PainterSample(QtGui.QWidget): def paintEvent(self, event): painter = QtGui.QPainter(self) painter.begin(self) painter.setBrush(QtCore.Qt.lightGray) painter.setPen(QtCore.Qt.black) rectangle = QtCore.QRectF(10.0, 20.0, 80.0, 60.0) startAngle = 30 * 16 spanAngle = 120 * 16 painter.drawArc(rectangle, startAngle, spanAngle) window = PainterSample() window.setWindowFlags(QtCore.Qt.Window) window.resize(90, 90) window.show()
円弧(drawChord)
指定したエリアに「startAngle」「spanAngle」によって定義される弧を描画します。「drawArc」と違い、始点・終点が結ばれます。

from PySide import QtCore, QtGui class PainterSample(QtGui.QWidget): def paintEvent(self, event): painter = QtGui.QPainter(self) painter.begin(self) painter.setBrush(QtCore.Qt.lightGray) painter.setPen(QtCore.Qt.black) rectangle = QtCore.QRectF(10.0, 20.0, 80.0, 60.0) startAngle = 30 * 16 spanAngle = 120 * 16 painter.drawChord(rectangle, startAngle, spanAngle) window = PainterSample() window.setWindowFlags(QtCore.Qt.Window) window.resize(90, 90) window.show()
凸面の多角形
指定されたポイントで、凸面の多角形を描画します。

from PySide import QtCore, QtGui class PainterSample(QtGui.QWidget): def paintEvent(self, event): painter = QtGui.QPainter(self) painter.begin(self) painter.setBrush(QtCore.Qt.lightGray) painter.setPen(QtCore.Qt.black) points = [ QtCore.QPointF(10.0, 80.0), QtCore.QPointF(20.0, 10.0), QtCore.QPointF(80.0, 30.0), QtCore.QPointF(90.0, 70.0) ] painter.drawConvexPolygon(points) window = PainterSample() window.setWindowFlags(QtCore.Qt.Window) window.resize(90, 90) window.show()
楕円(drawEllipse)
指定したエリアに楕円を描画します。

from PySide import QtCore, QtGui class PainterSample(QtGui.QWidget): def paintEvent(self, event): painter = QtGui.QPainter(self) painter.begin(self) painter.setBrush(QtCore.Qt.lightGray) painter.setPen(QtCore.Qt.black) rectangle = QtCore.QRectF(10.0, 20.0, 80.0, 60.0) painter.drawEllipse(rectangle) window = PainterSample() window.setWindowFlags(QtCore.Qt.Window) window.resize(90, 90) window.show()
指定したエリアが正方形の場合は、正円になります。
扇形(drawPie)
指定されたエリアに、「startAngle」「spanAngle」によって定義される扇形を描画します。

from PySide import QtCore, QtGui class PainterSample(QtGui.QWidget): def paintEvent(self, event): painter = QtGui.QPainter(self) painter.begin(self) painter.setBrush(QtCore.Qt.lightGray) painter.setPen(QtCore.Qt.black) rectangle = QtCore.QRectF(10.0, 20.0, 80.0, 60.0) startAngle = 30 * 16 spanAngle = 120 * 16 painter.drawPie(rectangle, startAngle, spanAngle) window = PainterSample() window.setWindowFlags(QtCore.Qt.Window) window.resize(90, 90) window.show()
多角形(drawPolygon)
指定されたポイントの多角形を描画します。

from PySide import QtCore, QtGui class PainterSample(QtGui.QWidget): def paintEvent(self, event): painter = QtGui.QPainter(self) painter.begin(self) painter.setBrush(QtCore.Qt.lightGray) painter.setPen(QtCore.Qt.black) points = [ QtCore.QPointF(10.0, 80.0), QtCore.QPointF(20.0, 10.0), QtCore.QPointF(80.0, 30.0), QtCore.QPointF(90.0, 70.0) ] painter.drawPolygon(points) window = PainterSample() window.setWindowFlags(QtCore.Qt.Window) window.resize(90, 90) window.show()
連続した線(drawPolyline)
指定されたポイントを通る線を描画します。始点・終点は閉じられません。

from PySide import QtCore, QtGui class PainterSample(QtGui.QWidget): def paintEvent(self, event): painter = QtGui.QPainter(self) painter.begin(self) painter.setBrush(QtCore.Qt.lightGray) painter.setPen(QtCore.Qt.black) points = [ QtCore.QPointF(10.0, 80.0), QtCore.QPointF(20.0, 10.0), QtCore.QPointF(80.0, 30.0) ] painter.drawPolyline(points) window = PainterSample() window.setWindowFlags(QtCore.Qt.Window) window.resize(90, 90) window.show()
四角形(drawRect)
指定したエリアに、四角形を描画します。「QPainter.drawRectの使い方!!」でご紹介したものと同じです。

from PySide import QtCore, QtGui class PainterSample(QtGui.QWidget): def paintEvent(self, event): painter = QtGui.QPainter(self) painter.begin(self) painter.setBrush(QtCore.Qt.lightGray) painter.setPen(QtCore.Qt.black) rectangle = QtCore.QRectF(10.0, 20.0, 80.0, 60.0) painter.drawRect(rectangle) window = PainterSample() window.setWindowFlags(QtCore.Qt.Window) window.resize(90, 90) window.show()
角の丸い四角形(drawRoundedRect)
指定されたエリアに、「xRadius」「yRadius」によって定義される丸みのある四角形を描画します。

from PySide import QtCore, QtGui class PainterSample(QtGui.QWidget): def paintEvent(self, event): painter = QtGui.QPainter(self) painter.begin(self) painter.setBrush(QtCore.Qt.lightGray) painter.setPen(QtCore.Qt.black) rectangle = QtCore.QRectF(10.0, 20.0, 80.0, 60.0) painter.drawRoundedRect(rectangle, 20.0, 15.0) window = PainterSample() window.setWindowFlags(QtCore.Qt.Window) window.resize(90, 90) window.show()
アウトラインだけ描画する方法
追加のテクニックとして、Brushを「QtCore.Qt.NoBrush」に設定することでアウトラインだけ描画することができます!(*´ω`*)b
from PySide import QtCore, QtGui class PainterSample(QtGui.QWidget): def paintEvent(self, event): painter = QtGui.QPainter(self) painter.begin(self) painter.setBrush(QtCore.Qt.NoBrush) painter.setPen(QtGui.QPen(QtCore.Qt.gray, 5, QtCore.Qt.SolidLine, QtCore.Qt.RoundCap, QtCore.Qt.RoundJoin)) painter.drawRect(QtCore.QRect(100, 100, 100, 100)) window = PainterSample() window.setWindowFlags(QtCore.Qt.Window) window.resize(720,405) window.show()
実行してみると、実線5pxでグレーの角がちょーーーーーーーーっと丸い四角形を描画できます!
