用 Delphi 程序调用 Python 代码画曲线图

用 Python 的库画图

Python 代码如下:

import matplotlib.pyplot as plt

squares = [1, 4, 9, 16, 25];
plt.plot(squares);
plt.grid(True)  #  网格线
plt.show();  # 这句话会弹出个窗口出来,里面是上述数据的曲线。

把以上代码,放进 PyScripter 这个 Python 的开发工具 IDE 里面,点三角形小箭头图标(Run  按钮),或者按 F9 (Run 快捷键),代码运行起来,弹出一个窗口,里面是曲线。

运行结果如图:

在 Delphi 的程序里面调用上述 Python 代码画图

1. 创建一个 VCL 程序。

2. 按照前两篇文章,放一个 TPanel,一个按钮在 TPanel 上面。再放两个 TMemo。

3. 拖 PythonEngine1 和 PythonGUIInputOutput1 到界面上。这里的 PythonGUIInputOutput1 注意用于 Python 代码的 print() 函数的输出显示。如何设置,请看本博客前面一篇文章。

4. 在 Memo2 里面,填入上述的 Python 代码;

5. 双击 Button1,Delphi IDE 自动创建 Button1 的 OnClick 事件代码框架,在里面写代码:

procedure TForm1.Button1Click(Sender: TObject);
begin
  PythonEngine1.ExecStrings(Memo2.Lines);
end;

6. 点击 Delphi IDE 上面的三角形按钮(Run),程序运行。在运行的程序上面点那个按钮,Python 代码被执行,Python 的画图库 matplotlib 弹出窗口。运行结果如图:

问题

看上面描述的步骤,很简单,就可以使用 Delphi 程序调用 Python 的库。前后只要几分钟就搞定。

实际上,我搞了几个小时。因为,按照上面的步骤搞完,我点击 Button1,运行 Python 程序,出现异常错误。错误提示如下:

Project testDrawLine.exe raised exception class $C000008E with message 'c000008e FLOAT_DIVIDE_BY_ZERO'.

为了查这个问题,花了很多时间,各种测试。因为同样的代码在 PyScripter 里面能够正常运行,所以我首先怀疑 PyScripter 运行的 Python 环境和我的 Delphi 的程序运行的 Python 环境不一致。当然,解决这个问题就是采用 Python 的 sys.version_info 去看 Python 版本。这就是前面的 Python 代码里面有 print(sys.version_info) 这一行的原因。

然后上网搜了一大堆的文章。网上各种文章里面的解决办法都试过了。最后找到这篇:

FindingPython · pyscripter/python4delphi Wiki · GitHub

然后根据这篇文章,又找到这篇:

https://github.com/pyscripter/python4delphi/wiki/MaskFPUExceptions

根据这篇文章,其实只需要增加一行代码,问题就解决:

procedure TForm1.FormCreate(Sender: TObject);
begin
  MaskFPUExceptions(True);
end;

上面的 MaskFPUExceptions 函数,在 PythonEngine.pas 单元里面。

搞定!

接下来,我要研究如何用 Delphi 程序,把画曲线的数据送进 Python 里面去。

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

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

相关文章

5分钟掌握接口自动化测试,4个知识点简单易学!

一. 什么是接口测试 接口测试是一种软件测试方法,用于验证不同软件组件之间的通信接口是否按预期工作。在接口测试中,测试人员会发送请求并检查接收到的响应,以确保接口在不同场景下都能正常工作。 就工具而言,常见的测试工具有…

DBNet详解及训练ICDAR2015数据集

论文地址:https://arxiv.org/pdf/1911.08947.pdf 开源代码pytorch版本:GitHub - WenmuZhou/DBNet.pytorch: A pytorch re-implementation of Real-time Scene Text Detection with Differentiable Binarization 前言 在这篇论文之前,文字检…

07.你还在手动部署代码吗

如今的项目或者个人项目中,大家的代码怎么部署呢?公司一般都有完整的持续集成以及持续交付平台,对于小公司可能也有各自搭建了一些,比如jenkins,以及gitlab集成的gitlab-ci等等,这些都可以完成我们部署的工作甚至是测试集成等等一系列流水化工作。 但是,即使如此,我依…

R语言学习case12:ggplot 置信区间(多线型)

接上文:多条曲线 R语言学习case11:ggplot 置信区间(包含多子图) 在ggplot2中,每个geom函数都接受一个映射参数。然而,并非每个美学属性都适用于每个geom。你可以设置点的形状,但不能设置线的“…

从雪花到分形几何

目录 前言雪花曲线分形几何雪花曲线工程化参考文献前言 新一股寒潮来袭,河南,安徽,重庆,湖北,湖南北部等地都飘起了大雪,一夜的功夫,世界银装素裹,雪白雪白的,好不美丽迷人。 雪花曲线 物理学上,雪花是一种晶体,是天空中的水汽经凝华而来的固态降水,结构随温度…

Go语言深度解析:探索 crypto/md5 标准库的强大功能

Go语言深度解析:探索 crypto/md5 标准库的强大功能 引言Go语言和MD5的基础知识MD5算法简介Go语言概述Go中的MD5实现 crypto/md5 库的使用方法基本用法处理大型数据安全注意事项 实际案例分析示例1:文件的MD5校验示例2:网络数据的MD5哈希示例3…

BZOJ0481. 树的重心之砍树Link Cut Centroids

题目 思路 分类讨论。 首先当树只有一个重心的时候,我们删掉最小的边再加上原边即可. 再看有两个重心的情况. 显然这棵树必定是类似这样的: 即删掉 A 后,以B 为根的子树是剩下的最大连通块,反之亦然. 那就可以得到一个结论: 删掉边 (A,B) 后,两棵树的大小相等. 那我们只…

【机器学习】某闯关类手游用户流失预测

Final Project: 某闯关类手游用户流失预测 1 案例简介 手游在当下的日常娱乐中占据着主导性地位,成为人们生活中放松身心的一种有效途径。近年来,各种类型的手游,尤其是闯关类的休闲手游,由于其对碎片化时间的利用取得了非常广泛…

HomeAssistant系统添加HACS插件商店与远程控制家中智能家居

文章目录 基本条件一、下载HACS源码二、添加HACS集成三、绑定米家设备 ​ 上文介绍了如何实现群晖Docker部署HomeAssistant,通过内网穿透在户外控制家庭中枢。本文将介绍如何安装HACS插件商店,将米家,果家设备接入 Home Assistant。 基本条件…

国图公考:公务员面试资格复审需要准备什么?

参加国考面试的考生在资格审核阶段需要准备以下材料: 1、本人身份证、学生证或工作证复印件。 2、公共科目笔试准考证复印件。 3、考试报名登记表。 4、本(专)科、研究生各阶段学历、学位证书(应届毕业生没有可以暂时不提供)。 5、报名资料上填写的各类证书材料…

YoloV8改进策略:Neck改进:HAM混合注意力机制改进YoloV8|多种改进,多种姿势涨点|代码注释详解

摘要 HAM通过快速一维卷积来缓解通道注意机制的负担,并引入通道分离技术自适应强调重要特征。HAM作为通用模块,在CIFAR-10、CIFAR-100和STL-10数据集上实现了SOTA级别的分类性能。 论文链接:https://www.sciencedirect.com/science/article/abs/pii/S0031320322002667?vi…

网工内推 | 网络工程师,需持有HCIE,最高16K,午餐补贴

01 科电数据 招聘岗位:网络工程师 职责描述: 1、负责网络及相关安全产品和技术,熟悉相关主流设备(路由器、交换机、防火墙、IPS/IDS、WAF、VPN、负载均衡、网闸)实施维护、安全加固及优化配置技术; 2、负责…

linux中的gdb调试

gdb是在程序运行的结果与预期不符合时,可以使用gdb进行调试 注意:使用gdb调试时要在编译上加-g参数 gcc -g -c hello.c 启动gdb调试: gdb file 对gdb进行调试 设置运行参数: set args 可指定运行参数 show args 可以查…

Spring5系列学习文章分享---第六篇(框架新功能系列+整合日志+ @Nullable注解 + JUnit5整合)

目录 **Spring5** 框架新功能系列一Spring 5.0 框架自带了通用的日志封装Spring5 **框架核心容器**支持Nullable **注解****Spring5** **核心容器支持函数式风格** GenericApplicationContext**Spring5** **支持整合** JUnit5感谢阅读 开篇: 欢迎再次来到 Spring 5 学习系列&am…

Windows如何安装Node.js环境并制作贪吃蛇小游戏分享好友远程访问

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

ICC2:polygon命令与复杂power plan

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 往期文章链接: ICC2&#x

全面解析:船运物流管理系统背后的技术

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

CSS:水平垂直居中

水平垂直居中效果如下&#xff1a; HTML: <div class"parent"><div class"child"></div> </div>公共的 CSS&#xff1a; .parent {width: 300px;height: 300px;background-color:#d0e4fe; }.child {width: 100px;height: 100px…

零基础如何入门渗透测试2024年最新版,保姆级教程,小白必看!

转眼间&#xff0c;从大三开始学安全&#xff0c;到现在也有五年了&#xff0c;也算是对渗透测试有一定理解&#xff0c;今天也是出一篇入门教程&#xff0c;以实操为主&#xff0c;希望可以帮助到想入门渗透测试的小白。如果觉得有用&#xff0c;可以给我点个赞和收藏&#xf…

[C语言] 代码调试, 快捷键说明,assert函数,const函数

一、Debug 和 Release 区别 1.Debug 为调试版本 包含调试信息,不做任何优化,便于程序员调试程序,产生Debug.exe 可以调试,因为文件中包含了调试信息,文件比release大 2.Release 为发布版本 进行了各种优化,是程序在代码大小和运行速度是最优,产生Release.exe 不能调试,可以以…