文章目录
- 1. 简介
- 2. 一个简单的示例
- 2. 加载一幅图片
- 3. 常用方法示例
1. 简介
QGraphicsView
是PyQt5中用于显示图形场景的小部件,它提供了许多常用的方法来控制视图的行为和属性。下面是一些常用的QGraphicsView
方法:
-
setScene(scene)
: 设置要显示的场景。 -
scene()
: 获取当前显示的场景。 -
setAlignment(alignment)
: 设置对齐方式,alignment参数是Qt.AlignmentFlag类型。 -
setRenderHint(hint, on=True)
: 设置渲染提示,on参数表示是否启用,默认为True。 -
resetMatrix()
: 重置视图矩阵。 -
fitInView(rect, aspectRatioMode=Qt.IgnoreAspectRatio)
: 将指定的矩形区域适配到视图中。 -
setViewportUpdateMode(mode)
设置视口更新模式,mode可以是以下之一:
- QGraphicsView.FullViewportUpdate
- QGraphicsView.MinimalViewportUpdate
- QGraphicsView.SmartViewportUpdate
- QGraphicsView.NoViewportUpdate
-
setTransformationAnchor(anchor)
: 设置变换锚点,用于指定在缩放、旋转等操作中的参考点。 -
- 设置拖拽模式,mode可以是以下之一:
setDragMode(mode)
- QGraphicsView.NoDrag
- QGraphicsView.ScrollHandDrag
- QGraphicsView.RubberBandDrag
-
setSceneRect(rect)
: 设置场景的可视区域。 -
setHorizontalScrollBarPolicy(policy)
: 设置水平滚动条策略,policy可以是以下之一:-
Qt.ScrollBarAsNeeded
-
Qt.ScrollBarAlwaysOff
-
Qt.ScrollBarAlwaysOn
-
-
setVerticalScrollBarPolicy(policy)
: 设置垂直滚动条策略,policy可以是以上相同的值。 -
viewport()
: 获取视口部件。 -
update()
:强制视图重新绘制。
这些方法使得你能够在QGraphicsView
中管理和控制场景的显示和交互。
2. 一个简单的示例
下面是一个简单的示例,演示如何使用QGraphicsView
显示一个圆形图形:
import sys
from PyQt5.QtWidgets import QApplication, QGraphicsView, QGraphicsScene, QGraphicsEllipseItem, QVBoxLayout, QWidget
from PyQt5.QtCore import Qtclass GraphicsViewExample(QWidget):def __init__(self):super().__init__()self.init_ui()def init_ui(self):layout = QVBoxLayout()self.setLayout(layout)# 创建一个场景scene = QGraphicsScene()# 在场景中添加一个圆形图形项circle_item = QGraphicsEllipseItem(0, 0, 100, 100)circle_item.setBrush(Qt.blue)scene.addItem(circle_item)# 创建一个视图view = QGraphicsView(scene)layout.addWidget(view)if __name__ == '__main__':app = QApplication(sys.argv)window = GraphicsViewExample()window.setWindowTitle('GraphicsView Example')window.setGeometry(100, 100, 400, 300)window.show()sys.exit(app.exec_())
在这个示例中,我们创建了一个自定义的GraphicsViewExample
类,继承自QWidget
。在init_ui
方法中,我们创建了一个QGraphicsScene
对象,并向其中添加了一个圆形图形项。然后,我们创建了一个QGraphicsView
对象,并将场景设置为其内容。最后,我们将QGraphicsView
添加到布局中并显示窗口。
运行此代码将显示一个窗口,其中包含一个红色的圆形图形。
2. 加载一幅图片
import sys
from PyQt5.QtWidgets import QApplication, QGraphicsView, QGraphicsScene, QGraphicsPixmapItem, QVBoxLayout, QWidget
from PyQt5.QtGui import QPixmapclass GraphicsViewExample(QWidget):def __init__(self):super().__init__()self.init_ui()def init_ui(self):layout = QVBoxLayout()self.setLayout(layout)# 创建一个场景scene = QGraphicsScene()# 加载图片pixmap = QPixmap("cat.jpg")# 在场景中添加一个图片图形项pixmap_item = QGraphicsPixmapItem(pixmap)scene.addItem(pixmap_item)# 创建一个视图view = QGraphicsView(scene)layout.addWidget(view)if __name__ == '__main__':app = QApplication(sys.argv)window = GraphicsViewExample()window.setWindowTitle('GraphicsView Example')window.setGeometry(100, 100, 400, 300)window.show()sys.exit(app.exec_())
在这个示例中,我们首先创建了一个自定义的GraphicsViewExample
类,继承自QWidget
。在init_ui
方法中,我们创建了一个QGraphicsScene
对象,并加载了一张名为"cat.jpg"的图片。然后,我们创建了一个QGraphicsView
对象,并将场景设置为其内容。最后,我们将QGraphicsView
添加到布局中并显示窗口。
确保将示例中的"image.jpg"替换为你想要加载和显示的图片路径。运行此代码将显示一个窗口,其中包含加载的图片。
3. 常用方法示例
import sys
from PyQt5.QtWidgets import QApplication, QGraphicsView, QGraphicsScene, QGraphicsPixmapItem, QVBoxLayout, QWidget
from PyQt5.QtGui import QPixmap, QPainter
from PyQt5.QtCore import Qtclass GraphicsViewExample(QWidget):def __init__(self):super().__init__()self.init_ui()def init_ui(self):layout = QVBoxLayout()self.setLayout(layout)# 创建一个场景scene = QGraphicsScene()# 加载图片pixmap = QPixmap("cat.jpg")# 在场景中添加一个图片图形项pixmap_item = QGraphicsPixmapItem(pixmap)scene.addItem(pixmap_item)# 创建一个视图并设置场景self.view = QGraphicsView()self.view.setScene(scene)layout.addWidget(self.view)# 设置对齐方式为居中self.view.setAlignment(Qt.AlignCenter)# 设置渲染提示,启用平滑渲染self.view.setRenderHint(QPainter.SmoothPixmapTransform)# 将指定的矩形适配到视图中self.view.fitInView(pixmap_item, Qt.KeepAspectRatio)# 禁用水平和垂直滚动条self.view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)self.view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)# 设置拖拽模式为手形滚动self.view.setDragMode(QGraphicsView.ScrollHandDrag)# 设置视图更新模式为最小视口更新self.view.setViewportUpdateMode(QGraphicsView.MinimalViewportUpdate)# 设置场景的可视区域self.view.setSceneRect(scene.itemsBoundingRect())if __name__ == '__main__':app = QApplication(sys.argv)window = GraphicsViewExample()window.setWindowTitle('GraphicsView Example')window.setGeometry(100, 100, 400, 300)window.show()sys.exit(app.exec_())
在这个示例中,我们使用了QGraphicsView
的一些常用方法:
setAlignment()
:将视图内容居中对齐。setRenderHint()
:启用平滑渲染,以改善图像显示效果。fitInView()
:将图像适配到视图中,保持宽高比。setHorizontalScrollBarPolicy()
和setVerticalScrollBarPolicy()
:禁用水平和垂直滚动条。setDragMode()
:设置拖拽模式为手形滚动。setViewportUpdateMode()
:设置视图更新模式为最小视口更新,以提高性能。setSceneRect()
:设置场景的可视区域,确保整个场景都可见。
运行结果如下