前提・実現したいこと
QGraphicViewに先にjpg形式の画像を貼っておき、その上から矩形を描画したいと考えています。
矩形の描画は一時的でよく、ドラッグ&ドロップをやり直すと矩形が再描画できるのが理想です。
該当のソースコード
python
import sys,re from PyQt5.QtCore import Qt from PyQt5.QtGui import QPainter from PyQt5.QtWidgets import QApplication,QWidget class Widget(QWidget): global start_x,start_y,end_x,end_y def __init__(self, parent=None): QWidget.__init__(self, parent) self.points = [] self.psets = [] self.points_a = [] self.setMinimumSize(500, 500) self.setMaximumSize(500, 500) def mousePressEvent(self, event): self.points.append(event.pos()) #無知が故の文字列処理です################## arr = [str(i) for i in self.points] moji =','.join(arr) global start_x ,start_y result = moji.replace('PyQt5.QtCore.QPoint','') result = result.strip('()') result = result.replace(',','') l_result = result.split() ####################################### start_x = l_result[0] start_y = l_result[1] def mouseMoveEvent(self, event): self.points_a =[] self.points_a.append(event.pos()) arr = [str(i) for i in self.points_a] moji =','.join(arr) global end_x ,end_y result = moji.replace('PyQt5.QtCore.QPoint','') result = result.strip('()') result = result.replace(',','') l_result = result.split() end_x = l_result[0] end_y = l_result[1] painter = QPainter(self) painter.setPen(Qt.black) painter.drawRect(int(start_x),int(start_y),int(end_x)-int(start_x),int(end_y)-int(start_y)) self.update() def mouseReleaseEvent(self, event): self.psets = [] self.psets.append(event.pos()) arr = [str(i) for i in self.psets] moji =','.join(arr) global end_x ,end_y result = moji.replace('PyQt5.QtCore.QPoint','') result = result.strip('()') result = result.replace(',','') l_result = result.split() end_x = l_result[0] end_y = l_result[1] self.points = [] self.update() def paintEvent(self, event): painter = QPainter(self) painter.setPen(Qt.black) for points in self.psets: painter.drawRect(int(start_x),int(start_y),int(end_x)-int(start_x),int(end_y)-int(start_y)) print(start_x,start_y,end_x,end_y) if __name__ == '__main__': app = QApplication(sys.argv) w = Widget() w.show() sys.exit(app.exec_())
試したこと
参考プログラムをもとに上記のプログラムを書きました(適当に書きすぎて本当に汚いです…)
マウスのドラッグ&ドロップで矩形を描画するのはこちらのサイトでも例があります。
これをQGraphicViewの画像の上で再現することができません。
mainwindowなどでやると動作はしますが、画像が入らないという問題が出てきました。
補足情報(FW/ツールのバージョンなど)
python 3.6
まだ回答がついていません
会員登録して回答してみよう