怎么在Qt Designer设计的界面上显示Matplotlib的绘图?

news2024/10/5 13:34:52

首先,利用Qt Designer设计界面。
在这里插入图片描述
设计好后保存为ui文件。
接着,将ui文件转为py文件。
我喜欢在python中进行转换,因此把转换命令封装为函数,运行一下即可。

import os
# pyuic5 -o output_file.py input_file.ui
#通过命令把.ui文件转换成.py文件
def ui_to_py(path_ui,path_py):
    '''把ui文件转为py文件.
    path_ui:ui文件路径,
    path_py:py文件路径'''
    cmd = f'pyuic5 -o {path_py} {path_ui}'
    os.system(cmd)
        
if __name__ =="__main__":
    ui='G:/MyPythonFiles/pyqt绘图测试界面.ui'
    py='G:/MyPythonFiles/pyqt绘图测试界面.py'
    ui_to_py(ui,py)
    print('转换完毕')

转换完成后的代码如下:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'G:/MyPythonFiles/pyqt绘图测试界面.ui'
#
# Created by: PyQt5 UI code generator 5.15.10
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1260, 689)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.graphicsView = QtWidgets.QGraphicsView(self.centralwidget)
        self.graphicsView.setGeometry(QtCore.QRect(370, 20, 801, 581))
        self.graphicsView.setObjectName("graphicsView")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1260, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "绘图测试"))

然后就是使用Matplotlib绘制图片,然后在我们刚才设计的界面上显示了。
此时,我们需要写一个类,继承在Qt Designer上设计的界面。
同时,创建一个QGraphicsScene,将其添加到self.graphicsView中。

就是这么简单!
但是因为找不到相关的资料,一开始我研究了好多天好多天,一直不得要领!简直是太痛苦了!
好在,最后还是弄明白了!ChatGTP帮了我许多忙!


from PyQt5.QtWidgets import QMainWindow, QGraphicsScene, QGraphicsView,QApplication
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import sys

import numpy as np
import matplotlib.pyplot as plt
# from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

from pyqt绘图测试界面 import *

class MyWindow(QMainWindow,Ui_MainWindow):
    def __init__(self):
        # 继承设计的ui界面
        super().__init__()
        # 继承其方法
        self.setupUi(self)
        self.retranslateUi(self)


        """ QGraphicsScene是Qt中的一个类,它是2D图形界面的基础,
        可以在其上添加各种图形项,例如线条、矩形、椭圆、文本、像素图等,
        还可以设置它们的位置、大小、旋转等属性。
        而QGraphicsView则是用于显示QGraphicsScene的视图类,
        可以实现缩放、平移等交互操作,以及使用鼠标对图形项进行选择、移动等操作。 """
        
        # 创建 QGraphicsScene,并添加到QGraphicsView
        self.scene = QGraphicsScene(self)
        self.graphicsView.setScene(self.scene)

        # 创建 Matplotlib Figure 和 FigureCanvas
        self.figure = Figure()
        # 把figure转为pyqt的一个控件
        self.canvas = FigureCanvas(self.figure)
        self.axes = self.figure.add_subplot(111)

        # 将 FigureCanvas 添加到 QGraphicsScene 中
        self.scene.addWidget(self.canvas)
        
        self.myplot()
        
    def myplot(self):

        # 绘制图像
        x = np.linspace(0, 10, 100)
        y = np.sin(x)
        self.axes.plot(x, y)

        

if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())

在这里插入图片描述

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

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

相关文章

网络模型-NQA与网络协议联动

一、NQA定义 网络质量分析NQA(Network QualityAnalysis)是一种实时的网络性能探测和统计技术,可以对响应时间、网络抖动、丢包率等网络信息进行统计。NOA能够实时监视网络0oS,在网络发生故障时进行有效的故障诊断和定位。 部署IPv4静态路由与BFD…

phonenumbers,一个强大的 Python 库!

更多Python学习内容:ipengtao.com 大家好,今天为大家分享一个强大的 Python 库 - phonenumbers。 Github地址:https://github.com/daviddrysdale/python-phonenumbers 在现代应用程序中,处理和验证电话号码是一项常见的需求。无论…

Pytorch深度学习实践笔记5(b站刘二大人)

🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:pytorch深度学习 🎀CSDN主页 发狂的小花 🌄人生秘诀:学习的本质就是极致重复! 视频来自【b站刘二大人】 目录 1 Linear Regress…

Windows Subsystem for Linux (WSL)查看在线发行版并在终端安装

在 Windows Subsystem for Linux (WSL) 中,你可以使用以下命令来查看在线可用的 Linux 发行版: 列出可用的 Linux 发行版: 使用以下命令查看可以通过在线商店获取的 Linux 发行版列表: wsl --list --online或者,你也可…

一个月速刷leetcodeHOT100 day11 链表完全解析 以及链表5道easy题

链表 表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包活两个部分:一…

二十九篇:构建未来:信息系统的核心框架与应用

构建未来:信息系统的核心框架与应用 1. 引言 在这个充满挑战和机遇的信息时代,信息系统已经成为现代组织不可或缺的神经中枢。它们不仅革新了我们处理信息的方式,更是极大地增强了决策制定的效率和质量。在这篇文章中,我将分享我…

基于PID的单片机温度控制系统设计

基于PID的温度控制系统设计 摘要 温度是工业上最基本的参数,与人们的生活紧密相关,实时测量温度在工业生产中越来越受到重视,离不开温度测量所带来的好处,因此研究控制和测量温度具有及其重要的意义。 本设计介绍了以AT89C52单片…

kubenetes中K8S的命名空间状态异常强制删除Terminating的ns

查看ns状态为异常: 查看ns为monitoring的状态为Termingating状态 使用方法一: kubectl delete ns monitoring --force --grace-period0 使用方法二: kubectl get ns monitoring -o json > monitoring.json 修改删除文件中的"kubern…

Docker快速搭建Oracle服务

服务器:CentOS7.9 1.安装docker yum install -y docker 2. 设置镜像加速 修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值 阿里云的docker镜像需要自己注册账号,也可以不注册账号,直接使用下面的连接。 也可以写入多…

深度学习中的多GPU训练(Pytorch 20)

一 多GPU训练 下面详细介绍如何从零开始并行地训练网络,这里需要运用小批量随机梯度下降算法。后面我还讲介绍如何使用高级API并行训练网络。 我们从一个简单的计算机视觉问题和一个稍稍过时的网络开始。这个网络有多个卷积层和汇聚层,最后可能 有几个…

AGI系列(1):掌握AI大模型提示词优化术,提问准确率飙升秘籍

当我们向AI大模型提问时,通常人们的做法是有什么问题,就直接去问,得到大模型的回复结果,时好时坏,完全没有可控性。 那么有没有一种方式或是一套方法,可以让我们向大模型提问时,得到的结果更准确…

怎么在网上赚点零花钱?分享十个正规的赚钱兼职平台

亲爱的朋友们,大家好!今天要和大家聊聊一个让人兴奋的话题——网上赚钱。在这个互联网飞速发展的时代,网上赚钱已经不再是遥不可及的梦想。如果你正想在网上赚点零花钱,那么这篇文章你可不能错过! 在这个信息爆炸的时代…

Linux系统命令traceroute详解(语法、选项、原理和实例)

目录 一、traceroute概述 二、语法 1、基本语法 2、命令选项 三、帮助信息 四、示例 1. 使用默认模式(ICMP Echo)追踪到目标主机 2. 使用UDP模式(需要root权限)追踪到目标主机 3. 不解析IP地址为主机名,直接显…

STL库 —— unordered_set与unordered_map的封装

这里要对 unordered_set 与 unordered_map 进行封装,封装时使用的是上一篇中学的 HashBucket 。不仅要完成封装,同时要写入迭代器。 一、HashBucket 的修改 1.1 节点的修改 T 首先来认识一下使用 unordered_set 和 ordered_map 时的区别: …

基于物联网架构的电子小票服务系统

1.电子小票物联网架构 采用感知层、网络层和应用层的3层物联网体系架构模型,电子小票物联网的架构见图1。 图1 电子小票物联网架构 感知层的小票智能硬件能够取代传统的小票打印机,在不改变商家原有收银系统的前提下,采集收音机待打印的购物…

SDK——如何快速上手一个接口驱动任务(以iic为例)

如何快速上手一个接口驱动任务:(这里以iic为例) 文章目录 一、注意这里有一些基本概念需要知道:1.关于主从模式的选择(以iic为例)2.关于外设的中断模式(intr)和轮询模式(polled)2.1…

【学习心得】回归任务的评估指标决定系数R^2

一、决定系数是什么? scikit-learn库在进行回归任务的时候,进行模型评估时的score()方法,默认采取的是计算的是决定系数(Coefficient of Determination),通常表示为得分。这个值衡量了模型预测值与实际观测…

系统思考—问题分析与持续改进

刚刚为一家500强企业完成了《系统思考—问题分析与持续改进》的课程。学员们开始意识到,不能仅仅停留在冰山上层事件去解决问题,而是要深入观察隐藏在背后的趋势变化。学会如何识别系统中的深层次原因,并从全局视角来制定更加有效的改进策略。…

DockerNetwork

Docker Network Docker Network 是 Docker 引擎提供的一种功能,用于管理 Docker 容器之间以及容器与外部网络之间的网络通信。它允许用户定义和配置容器的网络环境,以便容器之间可以相互通信,并与外部网络进行连接。 Docker Network 提供了以…

vulnhub靶场之FunBox-8

一.环境搭建 1.靶场描述 Its a box for beginners and can be pwned in the lunch break. This works better with VirtualBox rather than VMware 2.靶场下载 Funbox: Lunchbreaker ~ VulnHub 3.靶场启动 二.信息收集 1.寻找靶场真实IP地址 nmap -sP 192.168.2.0/24 arp-…