前提・実現したいこと
QGraphicViewに先にjpg形式の画像を貼っておき、その上から矩形を描画したいと考えています。
矩形の描画は一時的でよく、ドラッグ&ドロップをやり直すと矩形が再描画できるのが理想です。
該当のソースコード
python
1 2import sys,re 3from PyQt5.QtCore import Qt 4from PyQt5.QtGui import QPainter 5from PyQt5.QtWidgets import QApplication,QWidget 6 7class Widget(QWidget): 8 9 global start_x,start_y,end_x,end_y 10 11 def __init__(self, parent=None): 12 QWidget.__init__(self, parent) 13 self.points = [] 14 self.psets = [] 15 self.points_a = [] 16 self.setMinimumSize(500, 500) 17 self.setMaximumSize(500, 500) 18 19 def mousePressEvent(self, event): 20 self.points.append(event.pos()) 21 22 #無知が故の文字列処理です################## 23 arr = [str(i) for i in self.points] 24 moji =','.join(arr) 25 global start_x ,start_y 26 result = moji.replace('PyQt5.QtCore.QPoint','') 27 result = result.strip('()') 28 result = result.replace(',','') 29 l_result = result.split() 30 ####################################### 31 start_x = l_result[0] 32 start_y = l_result[1] 33 34 35 36 def mouseMoveEvent(self, event): 37 self.points_a =[] 38 self.points_a.append(event.pos()) 39 arr = [str(i) for i in self.points_a] 40 moji =','.join(arr) 41 global end_x ,end_y 42 result = moji.replace('PyQt5.QtCore.QPoint','') 43 result = result.strip('()') 44 result = result.replace(',','') 45 l_result = result.split() 46 end_x = l_result[0] 47 end_y = l_result[1] 48 painter = QPainter(self) 49 painter.setPen(Qt.black) 50 painter.drawRect(int(start_x),int(start_y),int(end_x)-int(start_x),int(end_y)-int(start_y)) 51 self.update() 52 53 def mouseReleaseEvent(self, event): 54 self.psets = [] 55 self.psets.append(event.pos()) 56 57 58 59 arr = [str(i) for i in self.psets] 60 moji =','.join(arr) 61 global end_x ,end_y 62 result = moji.replace('PyQt5.QtCore.QPoint','') 63 result = result.strip('()') 64 result = result.replace(',','') 65 l_result = result.split() 66 end_x = l_result[0] 67 end_y = l_result[1] 68 69 70 self.points = [] 71 self.update() 72 73 74 75 def paintEvent(self, event): 76 painter = QPainter(self) 77 painter.setPen(Qt.black) 78 79 for points in self.psets: 80 painter.drawRect(int(start_x),int(start_y),int(end_x)-int(start_x),int(end_y)-int(start_y)) 81 print(start_x,start_y,end_x,end_y) 82 83if __name__ == '__main__': 84 app = QApplication(sys.argv) 85 w = Widget() 86 w.show() 87 sys.exit(app.exec_())
試したこと
参考プログラムをもとに上記のプログラムを書きました(適当に書きすぎて本当に汚いです…)
マウスのドラッグ&ドロップで矩形を描画するのはこちらのサイトでも例があります。
これをQGraphicViewの画像の上で再現することができません。
mainwindowなどでやると動作はしますが、画像が入らないという問題が出てきました。
補足情報(FW/ツールのバージョンなど)
python 3.6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/10 14:48
2020/07/10 15:24 編集
2020/07/11 01:51
2020/07/11 02:58
2020/07/11 18:31
2020/07/11 19:27
2020/07/12 15:24 編集
2020/07/12 21:44