
どうも!たっくんです!
前回に続き、「QPainter」を見ていきたいと思います!今回は「線の描画(drawLine)」です!(*´ω`*)b
線の描画
線の設定は「setPen」で行い、「drawLine」を使うことで指定した線を描くことができます(`・ω・´)ゞ
setPen
「色だけ(QtCore.Qt.GlobalColor または QtGui.QColor)」「アウトラインのスタイル(QtCore.Qt.PenStyle)」「色とスタイル(QtGui.QPen)」の3種類の設定方法があります。
# 色(QtCore.Qt.GlobalColor)だけ指定(アウトラインのスタイルは変えられません) painter.setPen(QtCore.Qt.black) # アウトラインのスタイルだけ指定(色は変えられません) painter.setPen(QtCore.Qt.SolidLine) # QPenで指定 painter.setPen(QtGui.QPen(QtCore.Qt.black, 5, QtCore.Qt.SolidLine))
QPen
先の描画では、QPenを使うと色々な線を引けるようになります!特に「Cap Style」で線の終始の形を設定出来ます。この辺は、イラレやフォトショのパスと似ているところがあります!(`・ω・´)ゞ
# 実線 5pxの黒い線で、線の両端を丸める painter.setPen(QtGui.QPen(QtCore.Qt.black, 5, QtCore.Qt.SolidLine, QtCore.Qt.RoundCap))
drawLine
「線をQLine・QLineF」「始点・終点をQPoint・QPointF」「始点・終点を、座標(x,y)」の5種類の設定方法があります。
# QLineFで指定 painter.drawLine(QtCore.QLineF(10.0, 80.0, 90.0, 20.0)) # QPointFで指定 painter.drawLine(QtCore.QPointF(10.0, 80.0), QtCore.QPointF(90.0, 20.0)) # XYで指定 painter.drawLine(10.0, 80.0, 90.0, 20.0)
横10等分に線を引く
「self.rect」で取得したwidgetのエリアを元に、横を10等分にした縦線を作ってみたいと思います!
from PySide import QtCore, QtGui class PainterSample(QtGui.QWidget): def paintEvent(self, event): painter = QtGui.QPainter(self) painter.begin(self) painter.setPen(QtGui.QPen(QtCore.Qt.black, 1, QtCore.Qt.SolidLine)) # 分割数 split = 10 # widgetのエリアを取得 rect = self.rect() # widgetの幅を分割数で割り、間隔を求める stepWidth = rect.width() / float(split) # 分割数だけ繰り返す for i in range(0, split): # 繰り返し回数と間隔を掛け算して、位置を求める x = stepWidth * i # 線の描画 painter.drawLine(x, 0, x, rect.height()) window = PainterSample() window.setWindowFlags(QtCore.Qt.Window) window.resize(720,405) window.show()
実行してみると、左の線がちょっと見づらいですが10等分した線を引けました!

線を太くして、下側だけ線を引けば、MayaのTime Lineっぽくなりますね!(*´ω`*)b
