2024-06-25 22:37:29 发布
网友
我有需要注释的图像,即;我应该能够画一个矩形或多边形或任何形状,像使用钢笔。在
Pyqt4中可以使用哪些库?在
有两种可能的解决方案:
创建一个继承自QLabel或QWidget的类,并覆盖paintEvent方法。
使用QGraphicsView并添加表示这些特征的QGraphicsItem。
我认为第二个解决方案是最好的,所以我已经实现了。在
导入系统
import math from PyQt4.QtCore import * from PyQt4.QtGui import * class Widget(QWidget): def __init__(self, parent=None): QWidget.__init__(self, parent) self.btn = QPushButton("Press Me") self.gv = QGraphicsView() self.scene = QGraphicsScene(self) self.gv.setScene(self.scene) self.gv.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform) lay = QVBoxLayout(self) lay.addWidget(self.btn) lay.addWidget(self.gv) self.p_item = self.scene.addPixmap(QPixmap("lena.png")) self.p_item.setPos(100, 100) self.btn.clicked.connect(self.print_) self.emulate_drawing() def emulate_drawing(self): rect = self.p_item.boundingRect() path = QPainterPath() A = rect.height() for i in range(0, int(rect.width())-10): path.lineTo(i, A/2*(1-math.cos(i*math.pi/40))) item = QGraphicsPathItem(path, self.p_item) item.setPen(QPen(Qt.red, 3)) r = QRectF(QPointF(), rect.size()*0.5) item = QGraphicsEllipseItem(r, self.p_item) item.setPos(rect.center()-r.center()) item.setPen(QPen(Qt.blue, 4)) def print_(self): image = QImage(self.gv.viewport().size(), QImage.Format_RGB32) image.fill(Qt.transparent) painter = QPainter(image) self.gv.render(painter) painter.end() image.save("output.png") def showEvent(self, event): QWidget.showEvent(self, event) self.gv.fitInView(self.scene.sceneRect()) if __name__ == '__main__': app = QApplication(sys.argv) w = Widget() w.show() sys.exit(app.exec_())
另一个例子:
有两种可能的解决方案:
创建一个继承自QLabel或QWidget的类,并覆盖paintEvent方法。
使用QGraphicsView并添加表示这些特征的QGraphicsItem。
我认为第二个解决方案是最好的,所以我已经实现了。在
导入系统
另一个例子:
^{pr2}$相关问题 更多 >
编程相关推荐