PyQt5中的QGraphicsView()

文章目录

    • 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): 设置变换锚点,用于指定在缩放、旋转等操作中的参考点。

  • setDragMode(mode)
    设置拖拽模式,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():设置场景的可视区域,确保整个场景都可见。

运行结果如下

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/696429.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工程师工具箱系列(3)Arthas

文章目录 工程师工具箱系列(3)Arthas安装与准备Arthas插件使用场景查看某个变量值ognl方式调用Bean方法tt(TimeTunel)方式调用Bean的方法ognl调用带参数方法 资源总览 工程师工具箱系列(3)Arthas Java诊断利器 安装与准备 window…

数据库面试总结

数据库相关 mysql使用的函数 字符相关: concant() 连接字符 trim()去除字符的首尾空格 space(n) 返回n个空格 char_length() 返回字符的个数 ucase()/upper()将字符串 s 的所有字母变成大写字母 lcase()/lower() 将字符串 s 的所有字母变成小写字母 substr/substring/mid(s, …

做私域,朋友圈到底该怎么发?

说到做私域,很多人都会问:朋友圈该怎么发?相信大家的朋友圈早已经被各种广告攻占了,很多也都被大家屏蔽了。但如果要做私域,单纯发广告是行不通的,可是现在依然有很多人,认为做私域就是狂发朋友…

python内置类bytearray()详解

bytearray 是 Python 的一个内置类,它提供了一个可变序列的字节数组。 bytearray 数组的元素必须是0-255之间的整数,这些整数对应于ASCII字符集中的数字。下面着张图是部分ASCII字符: bytearray 是可变的,可修改其内容&#xff0c…

百度云防护502 Bad Gateway原因总结和处理方法

最近,随着原百度云加速用户新接入百度云防护后,很多站长反馈网站打不开,出现了502 Bad Gateway的情况。 为此,百度云这里给大家总结下,出现502的大概几个原因: 1.服务器防火墙拦截了百度云防护的IP节点请求…

水库大坝安全监测预警系统解决方案介绍

一、方案背景 随着社会的快速发展,水库大坝作为重要的水利工程设施,承载着防洪、灌溉、发电等多重功能。然而水库大坝的安全问题也日益凸显,一旦发生事故,后果将不堪设想,因此,建立一套高效、准确的水库大…

YOLO使用笔记

下载oss命令工具。 在OSS.exe文件下打开Power Shell, 输入指令: ./oss login之后输入用户名和密码。 选择将你想要上传的文件导入: ./oss cp {yourdir} oss://进入服务器实例中,打开终端下载数据 同样输入:oss login 进行登录。 登录成功…

vs-qt中无法加载qsqlite驱动,但是单独新建demo测试却又是正常的。。。

开发环境: Vs2015 + qt5.12 背景: 接手了一个项目,可以编译过去,也可以运行,, 但是登录一直失败,,但是数据库文件也是正常的。。。 最主要的是环境和同事的是一样的,,,但是他那边可以加载成功,我这边不可以。。 后来单独在vs中创建了一个demo,用来测试QSqlData…

【AIGC】Mac Intel 本地 LLM 部署经验汇总(CPU Only)

书接上文,在《【AIGC】本地部署 ollama(gguf) 与项目整合》章节的最后,我在 ollama 中部署 qwen1_5-14b-chat-q4_k_m.gguf 预量化模型,在非 Stream 模式下需要 89 秒才完成一轮问答,响应速度实在是太慢,后续需要想办法…

C++进阶 | [3] 续 | 搜索二叉树的两种模型

摘要:搜索二叉树的效率,搜索二叉树的两种搜索模型及应用举例 前面一片文章学习了并实现了搜索二叉树,这篇将从实际应用的角度进一步介绍搜索二叉树。 1. 搜索二叉树的效率 平衡搜索二叉树 BST的查找效率是 O(N)。 分析:如右图所示…

WWW服务器搭建(2)——Apache服务器配置与管理

一、Apache简介 1.1 关于Apache Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的Web服务器,可以在大多数计算机操作系统中运行,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。…

爆款小红书免费流量体系课程(两周变现),小红书电商教程

课程下载:小红书电商教程-课程网盘链接提取码下载.txt资源-CSDN文库 更多资源下载:关注我。 课程内容: 10-爆款标题(三段式取标题).mp3 11-爆款封面怎么作图.mp3 12-爆款内容的模板(三段式模板).mp3 13-小红书流量推荐背后的秘密(四大流…