文章目录
- 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 Qt
class 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 QPixmap
class 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 Qt
class 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()
:设置场景的可视区域,确保整个场景都可见。
运行结果如下