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

运行结果如下

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GCP谷歌云有什么数据库类型,该怎么选择

GCP谷歌云提供的数据库类型主要包括: 关系型数据库:这类数据库适用于结构化数据,通常用于数据结构不经常发生变化的场合。在GCP中,关系型数据库选项包括Cloud SQL和Cloud Spanner。Cloud SQL提供托管的MySQL、PostgreSQL和SQL Se…

Office之Word应用(二)

一、页眉添加文件名称和页码 1、双击页眉,点击“页眉-空白(三栏)” 2、删掉第一处(鼠标放在上面就会选中,Enter即可),第二处输入文档名称,第三处插入页码。 注:插入页码时…

微信小程序毕业设计-基于Java后端的微信小程序源码150套(附源码+数据库+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 🧡今天给大家分享150的微信小程序毕业设计,后台用Java开发,这些项目都经过精心挑选,涵盖了不同的实战主题和用例,可做毕业设…

灾备建设中虚拟机备份自定义数据块大小应用

灾备建设中,传输备份数据时,自定义数据块大小可以帮助优化数据传输和存储效率。 确定数据块大小,首先,需要确定合适的数据块大小。这可以根据备份数据量和网络带宽来决定。通常情况下,较小的数据块可以更好地适应网络…

82.网络游戏逆向分析与漏洞攻防-移动系统分析-坐标修正数据包的处理与模拟

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果,代码看不懂是正常的,只要会抄就行,抄着抄着就能懂了 内容…

采油厂职工向媒体投稿的好方法找到了

作为一名采油厂的职工,我深知在媒体上定期投稿的重要性。这不仅是我们展示工作成果、传播企业文化的重要途径,更是上级考核我们工作表现的一项指标。然而,在投稿的过程中,我经历了不少心酸与困扰。 起初,我采用传统的邮箱投稿方式。每天,我都会花费大量时间在网络上搜索合适的媒…

kafka 图形化

介绍 idea 中的一个插件 kafkalytic,kafka 图形化 简单又强大 安装 使用界面 总体信息 数据查看

Python管理PVE(Proxmox VE)云平台--节点资源统计

一、前言 写本脚本的初衷是因手动查看统计已分配的PVE资源过于耗时,因此写一个脚本一劳永逸,具体实现方法:利用Python的paramiko模块进行远程命令查看、统计PVE平台各节点已分配的cpu、内存、磁盘空间。 二、步骤 1.构建shell脚本 1.1 统计…

每日一题 城市群的数量

题目解析 城市群数量_牛客题霸_牛客网 当解决这个问题时,首先需要理解题目要求。题目中给出了一个城市之间的邻接矩阵,矩阵中的元素表示城市之间是否直接相连。如果两个城市直接相连,或者通过其他城市间接相连,它们就属于同一个城…

进程间的IPC通信机制

一、介绍 进程与进程间的用户空间相互独立,内核空间共享。 1.传统的进程间通信机制 a.无名管道 pipe b.有名管道 fifo c.信号 signal 2.system V中的IPC对象 a.消息队列 message queue b.共享内存 shared memory c.信号灯集 semaphoare 3.可用于跨主机传输…

Weblogic 任意文件上传漏洞(CVE-2018-2894)

1 漏洞描述 CVE-2018-2894漏洞存在于Oracle WebLogic Server的Web服务测试页面(Web Service Test Page)中。这个页面允许用户测试Web服务的功能,但在某些版本中,它包含了一个未经授权的文件上传功能。攻击者可以利用这个漏洞&…

变频器通过Modbus转Profinet网关接电机与PLC通讯在自动化的应用

Modbus转Profinet网关(XD-MDPN100/300/600)的作用是将Modbus协议转换为Profinet协议,支持Modbus RTU主站/从站,并且Modbus转Profinet网关设备自带网口和串口,既可以实现协议转换的同时,也可以实现接口的转换…

ARM架构安全特性之隔离技术

安全之安全(security)博客目录导读 目录 一、保护代码和数据 二、TrustZone 三、安全世界之间的隔离 四、Secure-EL2扩展 五、保护主流计算工作负载 六、领域管理扩展(RME) 七、内存密集型可信应用程序 八、Arm动态TrustZone技术 强制执行明确定义的安全边界是安全工程…

变现 5w+,一个被严重低估的 AI 蓝海赛道,居然用这个免费国产AI工具就能做!

大家好,我是程序员X小鹿,前互联网大厂程序员,自由职业2年,也一名 AIGC 爱好者,持续分享更多前沿的「AI 工具」和「AI副业玩法」,欢迎一起交流~ 文章首发于公众号:X小鹿AI副业 之前X小鹿一直在各…

HTML与cgi程序的数据交互

1. Html通过ajax获取cgi返回的数据 function HtmlGetCgiData() {$.ajax({type: POST, //提交方法url: cgi-bin/wg67_key_in/wg67_key_in_reflush.cgi, //调用到的cgi程序data: "ajax", //发送的数据,不可缺失该项,不能为空(空&…

从“金事通”带给我意想不到的来说--“数据是架构的中心”

背景 上周一个保险的销售人员来找我完成一定的售后流程。其中有一项是请我下载一个叫 金事通的 APP。说实在的我根本没听过。她说这是政治任务。我想不是有你们保险公司的APP了嘛。为什么还要我安装。没办法先安装吧。 经历了注册、人脸识别的步骤后。可以登录了。注册短信发…

AR系列路由器配置本地同一网段互通

A R 路由器是华为公司推出的企业级路由器产品系列,具有高可靠性、高性能和易管理等特点。AR 系列路由器提供的功能包括路由转发、安全接入、语音、视频、无线等多种业务,支持各种接入方式和协议,并且可以方便地进行扩展和升级。 实验拓扑图&…

Spring:@Async注解使用注意事项及九大失效场景

前言 原文作者:微信公众号:苏三说技术 场景举例 代码案例 点击此处可观看:Async注解使用注意事项及九大失效场景

浪潮信息联合SAP助力玉柴集团实现数字化转型的飞跃

数字化时代下,企业面临着前所未有的机遇和挑战。为顺应这一趋势,众多企业纷纷踏上了数字化转型的征程,其中就包括玉柴集团。值得一提的是,在玉柴集团转型过程中,SAP、浪潮信息等国际一流厂商予以了强大的算力支持&…

SSH远程管理 远程访问及控制

SSH远程管理 SSH(Secure Shell) 是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功 能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令。与早 期的 Telent (远程登录)、RSH(Remote Shell, 远程执行命…