gpt4 book ai didi

python - 在 pyQt4 中的图像上涂鸦

转载 作者:太空宇宙 更新时间:2023-11-04 04:27:00 28 4
gpt4 key购买 nike

假设我想加载一张图片并在上面涂鸦。但是如果图像很大,那么它就无法放入图像查看器中。因此我想要一个滚动条。我该怎么做?

例如:假设图像是:

enter image description here

当我将它加载到我的程序中时,它变成了:

enter image description here

现在我想把它放到滚动条小部件中(以便可以完全访问图像),最重要的是我想在上面做任何类型的绘图(涂鸦)。我如何使用 PyQt4 执行此操作?是否有任何可用的 python 代码?

最佳答案

如果你想用 QScrollbar 放置一个图像,一个可能的选择是使用 QScrollArea,但如果你表示你想绘制正确的事情是使用 QGraphicsView 因为它允许您添加项目。例如,要制作涂鸦,您可以使用 QGraphicsPathItem 和图像 QGraphicsPixmapItem,如下所示:

from PyQt4 import QtCore, QtGui

class ScribbleView(QtGui.QGraphicsView):
def __init__(self, parent=None):
super(ScribbleView, self).__init__(parent)
self.setScene(QtGui.QGraphicsScene(self))
self._image_item = QtGui.QGraphicsPixmapItem()
self.scene().addItem(self._image_item)
self.initial_path()

def initial_path(self):
self._path = QtGui.QPainterPath()
pen = QtGui.QPen(QtGui.QColor("green"), 4, QtCore.Qt.SolidLine, QtCore.Qt.RoundCap)
self._path_item = self.scene().addPath(self._path, pen)

@QtCore.pyqtSlot()
def load_image(self):
filename = QtGui.QFileDialog.getOpenFileName(self,
"Open Image", QtCore.QDir.currentPath(),
"Image Files (*.png *.jpg *.bmp)")
if filename:
self._image_item.setPixmap(QtGui.QPixmap(filename))

def mousePressEvent(self, event):
if not self._image_item.pixmap().isNull():
self._path.moveTo(self.mapToScene(event.pos()))
self._path_item.setPath(self._path)
super(ScribbleView, self).mousePressEvent(event)

def mouseMoveEvent(self, event):
if not self._image_item.pixmap().isNull():
self._path.lineTo(self.mapToScene(event.pos()))
self._path_item.setPath(self._path)
super(ScribbleView, self).mousePressEvent(event)

def mouseReleaseEvent(self, event):
if not self._image_item.pixmap().isNull():
self._path.lineTo(self.mapToScene(event.pos()))
self._path_item.setPath(self._path)
self.initial_path()
super(ScribbleView, self).mouseReleaseEvent(event)

class ScribbleWidget(QtGui.QMainWindow):
def __init__(self, parent=None):
super(ScribbleWidget, self).__init__(parent)
view = ScribbleView()
self.setCentralWidget(view)
menubar = self.menuBar()
file_menu = menubar.addMenu("&File")
image_action = file_menu.addAction("Load Image")
image_action.triggered.connect(view.load_image)

if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
w = ScribbleWidget()
w.resize(640, 480)
w.show()
sys.exit(app.exec_())

enter image description here

关于python - 在 pyQt4 中的图像上涂鸦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53306486/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com