はじめに
すべてのQWidgetクラスは,QPaintDeviceクラスのサブクラスです。QPaintDeviceはQPainterを使って描画します。そしてペイントデバイスのサイズは左上隅からのピクセル単位で決まります。
QPainterクラスはウィジェットやプリンタなどのペイント可能なデバイスに対して低レベルのペイントを行います。通常はウィジェットのペイントイベントで使用されます。QPaintEventはウィジェットの外観が更新されるたびに発生します。
ペインターはbegin()メソッドを呼ぶことでアクティブになり、end()メソッドで非アクティブになります。その間色々なメソッドを使って希望するパターンをペイントできます。
描画メソッド一覧
1.begin()
対象のデバイスのペイントを開始
2.drawArc()
開始と終了角度間の円弧を描画
3.drawEllipse()
矩形の中に楕円を描く(短径を指定して、円を描画できる?)
4.drawLine()
エンドポイント座標を指定して線を描画
5.drawPixmap()
画像ファイルからpixmapを抽出し、指定位置に表示する
6.drwaPolygon()
座標配列による多角形を描画
7.drawRect()
左上の座標と横、縦のサイズ指定して長方形を描画
8.drawText()
与えられた座標にテキストを描画
9.fillRect()
短径をQColorパラメータで塗りつぶす
10.setBrush()
描画用のブラシのスタイルを設定
11.setPen()
描画に使用するペンの色、スタイルを設定
デモ
以下のデモを実行すると色々なメソッドを試すことができます。
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Example(QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.text = "hello world"
self.setGeometry(100,100, 400,300)
self.setWindowTitle('Draw Demo')
self.show()
def paintEvent(self, event):
qp = QPainter()
qp.begin(self)
qp.setPen(QColor(Qt.red))
qp.setFont(QFont('Arial', 20))
qp.drawText(10,50, "hello Python")
qp.setPen(QColor(Qt.blue))
qp.drawLine(10,100,100,100)
qp.drawRect(10,150,150,100)
qp.setPen(QColor(Qt.yellow))
qp.drawEllipse(100,50,100,50)
qp.drawPixmap(220,10,QPixmap("test.png"))
qp.fillRect(20,175,130,70,QBrush(Qt.SolidPattern))
qp.end()
def main():
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
実行すると以下のようになりました。
さいごに
個人的に描画した図形をドラッグ&ドロップしたりする方法が気になります。
参考
