PyQt5中的QGraphicsView()

news2024/11/25 5:21:35

文章目录

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

运行结果如下

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初识C语言——第十九天

for循环 1.简单概述 2.执行流程 3.建议事项:

vue从入门到精通(一):初始Vue

一,Vue是什么 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代…

长难句打卡 5.13

And in Europe, some are up in arms over a proposal to drop a specific funding category for social-science research and to integrate it within cross-cutting topics of sustainable development. 在欧洲,有些人正竭力反对一项“终止专用于社会科学研究的…

java spring boot动态数据库获得配置信息连接多数据源(数据库)

数据库 数据库文件和代码文件 https://download.csdn.net/download/qq_34631220/89304173 链接:https://pan.baidu.com/s/1xoh6xiSRx4nW_gKvR1QPjg 提取码:i7b7 –来自百度网盘超级会员V5的分享 文章位置 添加链接描述 说明:事务只能单库…

JUC下的Future 详解

java.util.concurrent.Future 是Java并发编程中一个重要的接口,它代表一个异步计算的结果。当你提交一个任务到执行器(如ExecutorService的submit方法),它会返回一个Future对象。这个对象允许你查询任务是否完成、取消任务、获取任…

软件需求工程习题

1.(面谈)是需求获取活动中发生的需求工程师和用户间面对面的会见。 2.使用原型法进行需求获取,(演化式)原型必须具有健壮性,代码质量要从一开始就能达到最终系统的要求 3.利用面谈进行需求获取时&#xf…

vue3使用依赖注入实现跨组件传值

父组件Index.vue: <script setup> import { onMounted, provide, ref } from vue import Child from ./Child.vue import ./index.cssconst count ref(0)provide(count, count)const handleClick () > {count.value }onMounted(() > {}) </script><tem…

基于SpringBoot + MySQL的宠物医院管理系统设计与实现+毕业论文+指导搭建视频

系统介绍 项目的使用者可以避免排队挂号&#xff0c;比较方便&#xff0c;也方便于宠物医院的管理。现在的宠物本系统根据华阳社区宠物医院管理工作流程将系统使用者划分为三类&#xff0c;分别为、宠物医生、宠物主人以及系统管理人员&#xff0c;以下是对该三类类用户的具体…

基于百川大语言模型的RSS新闻过滤应用【云服务器+公网网页,随时随地看自己DIY订阅的新闻内容】

背景 目前从公众号、新闻媒体上获得的新闻信息,都是经过算法过滤推荐的,很多时候会感到内容的重复性和低质量,因为他们也要考虑到自己的利益,并非完全考虑用户想要的、对用户有价值的信息。这时,如果要获取自己认为重要的信息,定制化开发自己的筛选算法更好。 效果 素材…

自托管站点监控工具 Uptime Kuma 搭建与使用

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 Uptime Kuma 是一个类似 Uptime Robot 的站点监控工具&#xff0c;它可以自托管在自己的 Nas 或者 VPS 上&#xff0c;用来监控各类站点、数据库等 监控类型&#xff1a;支持监控 HTTP(s) / TCP / HTTP(s…

vue数据大屏并发请求

并发? 处理并发 因为js是单线程的&#xff0c;所以前端的并发指的是在极短时间内发送多个数据请求&#xff0c;比如说循环中发送 ajax , 轮询定时器中发送 ajax 请求. 然后还没有使用队列, 同时发送 的. 1. Promise.all 可以采用Promise.all处理并发&#xff0c; 当所有pro…

ComfyUI 介绍及入门

介绍 ComfyUI 是一种用户界面&#xff0c;它采用了基于节点的流程设计&#xff0c;用于操作一种名为 Stable Diffusion 的技术。这种设计允许用户通过自定义流程来实现更精确的工作流程&#xff0c;并确保结果的可重复性。在 ComfyUI 中&#xff0c;每个模块都承担着特定的任务…

【C++】-【QT】类库使用-001

1主窗口创建 1.1【makefile】配置 1 源码 QT widgetsSOURCES main.cpp2 图示 1.2源码 1 源码 #include <QWidget> #include <QApplication>using namespace std;int main(int argc,char *argv[]) {QApplication a(argc,argv);QWidget w;w.show();return a…

AlphaFold 3:开启生物医药新革命

AlphaFold 3简介 DeepMind与Isomorphic Labs联合发布了AlphaFold 3&#xff0c;这是一个可以更准确预测蛋白质和其他生物分子结构及其相互作用的AI模型&#xff0c;标志着生物医学研究的新革命 AlphaFold 3&#xff0c;这款由DeepMind与Isomorphic Lab联手推出的最新人工智能…

深度解读《深度探索C++对象模型》之虚继承的实现分析和效率评测(一)

目录 前言 具有虚基类的对象的构造过程 通过子类的对象存取虚基类成员的实现分析 接下来我将持续更新“深度解读《深度探索C对象模型》”系列&#xff0c;敬请期待&#xff0c;欢迎左下角点击关注&#xff01;也可以关注公众号&#xff1a;iShare爱分享&#xff0c;或文章末…

鸿蒙开发:【从TypeScript到ArkTS的适配规则】

从TypeScript到ArkTS的适配规则 ArkTS通过规范约束了TypeScript&#xff08;简称TS&#xff09;中过于灵活而影响开发正确性或者给运行时带来不必要额外开销的特性。本文罗列了所有在ArkTS中限制的TS特性&#xff0c;并提供了重构代码的建议。ArkTS保留了TS大部分的语法特性&a…

机器学习入门:使用Scikit-learn进行实践

机器学习入门&#xff1a;使用Scikit-learn进行实践 机器学习是人工智能的一个重要分支&#xff0c;它使计算机具备了从数据中学习和改进性能的能力&#xff0c;而不需要明确的编程。在这个教程中&#xff0c;我们将介绍如何使用Python中的Scikit-learn库进行机器学习任务。 …

使用Gin编写Web API项目并自动化文档

最近需要使用Go写一个Web API项目&#xff0c;可以使用Beego与Gin来写此类项目&#xff0c;前文使用Beego创建API项目并自动化文档介绍了使用Beego来创建的Web API项目并自动化文档的方法。本文就介绍一下使用Gin来编写Web API项目并自动化文档。 一、创建项目 在创建Beego项…

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

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

打印机 ansible配置dhcp和打印机

部署dhcp服务器 主机发送Discover报文 目标为广播地址 同一网段的dhcp收到报文后&#xff0c;dhcp响应一个offer报文 offer报文&#xff1a;dhcp自己的ip地址。和客户端ip以及使用周期&#xff0c;和客户端ip网络参数 最后主机单独发一个request报文 给那个选择的dhcp服务器 &…