PyQT: 开发一款ROI绘制小程序
warning:
这篇文章距离上次修改已过193天,其中的内容可能已经有所变动。
以下是一个简单的PyQt5程序,用于绘制图像上的感兴趣区域(ROI)。这个程序使用了QPainter
来处理绘图,并且提供了鼠标点击和拖动事件来绘制矩形ROI。
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QPainter, QMessageBox
from PyQt5.QtCore import Qt, QPoint
from PyQt5.QtGui import QPen, QBrush
class ROIWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
self.roi = []
def initUI(self):
self.setMouseTracking(True)
self.setMinimumSize(400, 300)
self.setWindowTitle('ROI Drawer')
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.start = event.pos()
self.end = self.start
self.roi.append((self.start, self.end))
self.update()
def mouseMoveEvent(self, event):
if event.buttons() & Qt.LeftButton:
self.end = event.pos()
self.update()
def paintEvent(self, event):
painter = QPainter(self)
painter.setPen(QPen(Qt.red, 1))
painter.setBrush(QBrush(Qt.transparent))
for i in range(len(self.roi)):
rect = self.roi[i]
painter.drawRect(rect[0].x(), rect[0].y(), self.end.x() - rect[0].x(), self.end.y() - rect[0].y())
def keyPressEvent(self, event):
if event.key() == Qt.Key_Escape:
self.roi = []
self.update()
elif event.key() == Qt.Key_S:
QMessageBox.information(self, 'ROI', f'ROI count: {len(self.roi)}')
def main():
app = QApplication(sys.argv)
ex = ROIWindow()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
这段代码定义了一个名为ROIWindow
的类,它继承自QWidget
。程序初始化时,会启用鼠标跟踪。鼠标左键点击和移动事件被重写以绘制矩形。按下Esc键将清除所有绘制的ROI,按S键将显示当前ROI的数量。
评论已关闭