【K12】tk窗口+plt图像功能-学习物理中的串并联研究【附源码说明】

程序源码

import tkinter as tk
import matplotlib.pyplot as plt

# 初始化 matplotlib 的字体设置
plt.rcParams['font.family'] = 'SimHei'

# 计算串联电路的函数
def calculate_series():
    try:
        # 获取用户输入的电阻值并转换为浮点数
        r1 = float(entry_r1.get())
        r2 = float(entry_r2.get())
        # 计算总电阻
        r_total = r1 + r2
        # 更新结果标签显示各电阻值
        result_label_r1.config(text=f"R1 = {r1:.2f} Ω")
        result_label_r2.config(text=f"R2 = {r2:.2f} Ω")
        result_label_r_total.config(text=f"R总 = {r_total:.2f} Ω")

        # 获取用户输入的电压值并转换为浮点数
        u = float(entry_u.get())
        # 计算电流值
        i = u / r_total
        # 计算两个电阻上的电压值
        v1 = i * r1
        v2 = i * r2

        # 清空图像
        plt.clf()

        # 绘制图像,包括串联的电阻和电压线,以及总电阻和总电压线
        plt.plot([ r1, r2], [ v1, v2], 'ro-',r1 + r2,u,'bo-')
        plt.xlabel('R (Ω)')  # 设置x轴标签为电阻(Ω)
        plt.ylabel('V (V)')   # 设置y轴标签为电压(V)
        plt.title('串联电路')  # 设置图形标题为“串联电路”
        plt.show()             # 显示图形

        # 显示电流值
        result_label_i1.config(text=f"I1 = {i:.2f} A")  # 显示第一个电阻上的电流值
        result_label_i2.config(text=f"I2 = {i:.2f} A")  # 显示第二个电阻上的电流值

        # 显示提示信息,告知用户这是串联电路的信息
        result_label.config(text="串联电路中的各部分信息")
    except ValueError:  # 如果输入的不是有效数字,则抛出异常
        result_label_r1.config(text="")  # 清空电阻标签内容
        result_label_r2.config(text="")  # 清空电阻标签内容
        result_label_r_total.config(text="")  # 清空总电阻标签内容
        result_label_i1.config(text="")  # 清空电流标签内容
        result_label_i2.config(text="")  # 清空电流标签内容
        result_label.config(text="请输入有效的电阻值和电压值")  # 设置提示信息,告知用户输入有效值

# 计算并联电路的函数
def calculate_parallel():
    try:
        # 获取输入的电阻值
        r1 = float(entry_r1.get())# 获取用户输入的第一个电阻值并转换为浮点数
        r2 = float(entry_r2.get())# 获取用户输入的第二个电阻值并转换为浮点数

        # 计算总电阻
        r_total = (r1 * r2) / (r1 + r2)

        # 更新结果标签
        result_label_r1.config(text=f"R1 = {r1:.2f} Ω")
        result_label_r2.config(text=f"R2 = {r2:.2f} Ω")
        result_label_r_total.config(text=f"R总 = {r_total:.2f} Ω")

        # 计算电压和电流
        u = float(entry_u.get())
        i1 = u / r1
        i2 = u / r2

        # 清空图像
        plt.clf()

        # 绘制图像
        plt.plot([r1, r2], [i1, i2], 'ro-', r_total, i1 + i2, 'bo-')

        plt.xlabel('R (Ω)')
        plt.ylabel('I (A)')
        plt.title('并联电路')
        plt.show()

        # 更新电流标签
        result_label_i1.config(text=f"I1 = {i1:.2f} A")
        result_label_i2.config(text=f"I2 = {i2:.2f} A")

        # 更新提示信息标签
        result_label.config(text="并联电路中的各部分信息")

    except ValueError:
        # 处理值错误的情况
        result_label_r1.config(text="")
        result_label_r2.config(text="")
        result_label_r_total.config(text="")
        result_label_i1.config(text="")
        result_label_i2.config(text="")
        result_label.config(text="请输入有效的电阻值和电压值")
def reset():
    entry_r1.delete(0, tk.END)
    entry_r2.delete(0, tk.END)
    entry_u.delete(0, tk.END)
    result_label_r1.config(text="")
    result_label_r2.config(text="")
    result_label_r_total.config(text="")
    result_label_i1.config(text="")
    result_label_i2.config(text="")
    result_label.config(text="")
    plt.clf()


# 创建主窗口
window = tk.Tk()
window.title("电路计算器")

# 创建输入框和标签
label_r1 = tk.Label(window, text="R1:")
label_r1.grid(row=0, column=0)
entry_r1 = tk.Entry(window)
entry_r1.grid(row=0, column=1)

label_r2 = tk.Label(window, text="R2:")
label_r2.grid(row=1, column=0)
entry_r2 = tk.Entry(window)
entry_r2.grid(row=1, column=1)

label_u = tk.Label(window, text="U:")
label_u.grid(row=2, column=0)
entry_u = tk.Entry(window)
entry_u.grid(row=2, column=1)

# 创建按钮
button_series = tk.Button(window, text="串联", command=calculate_series)
button_series.grid(row=3, column=0)

button_parallel = tk.Button(window, text="并联", command=calculate_parallel)
button_parallel.grid(row=3, column=1)

button_reset = tk.Button(window, text="初始化", command=reset)
button_reset.grid(row=3, column=2)

# 创建结果标签
result_label_r1 = tk.Label(window, text="")
result_label_r1.grid(row=4, column=0)

result_label_r2 = tk.Label(window, text="")
result_label_r2.grid(row=4, column=1)

result_label_r_total = tk.Label(window, text="")
result_label_r_total.grid(row=4, column=2)

result_label_i1 = tk.Label(window, text="")
result_label_i1.grid(row=5, column=0)

result_label_i2 = tk.Label(window, text="")
result_label_i2.grid(row=5, column=1)

result_label = tk.Label(window, text="")
# 创建结果标签
result_label_r1 = tk.Label(window, text="")
result_label_r1.grid(row=4, column=0)

result_label_r2 = tk.Label(window, text="")
result_label_r2.grid(row=4, column=1)

result_label_r_total = tk.Label(window, text="")
result_label_r_total.grid(row=4, column=2)

result_label_i1 = tk.Label(window, text="")
result_label_i1.grid(row=5, column=0)

result_label_i2 = tk.Label(window, text="")
result_label_i2.grid(row=5, column=1)

result_label = tk.Label(window, text="")
result_label.grid(row=6, columnspan=3)

# 运行主循环
window.mainloop()


程序运行图像输出

在这里插入图片描述

代码主要实现功能如下

以下是对代码功能的分段讲解:

1. 获取输入的电阻值:
r1 = float(entry_r1.get())
r2 = float(entry_r2.get())

这段代码从entry_r1entry_r2两个输入框中获取用户输入的电阻值,并将其转换为浮点数类型。

2. 计算总电阻:
r_total = (r1 * r2) / (r1 + r2)

这段代码根据并联电路的公式计算总电阻,将结果存储在r_total变量中。

3. 更新结果标签:
result_label_r1.config(text=f"R1 = {r1:.2f} Ω")
result_label_r2.config(text=f"R2 = {r2:.2f} Ω")
result_label_r_total.config(text=f"R总 = {r_total:.2f} Ω")

这段代码更新result_label_r1result_label_r2result_label_r_total三个标签的文本,显示计算得到的电阻值。

4. 计算电压和电流:
u = float(entry_u.get())
i1 = u / r1
i2 = u / r2

这段代码从entry_u输入框中获取用户输入的电压值,并根据欧姆定律计算电流值i1i2

5. 清空图像:
plt.clf()

这段代码清空之前绘制的图像,以便绘制新的图像。

6. 绘制图像:
plt.plot([r1, r2], [i1, i2], 'ro-', r_total, i1 + i2, 'bo-')

这段代码使用plot()函数绘制并联电路的图像,其中包括两个电阻点([r1, r2])和对应的电流点([i1, i2]),以及总电阻和总电流点(r_total, i1 + i2)。

7. 显示图像:
plt.xlabel('R (Ω)')
plt.ylabel('I (A)')
plt.title('并联电路')
plt.show()

这段代码设置图像的横轴标签、纵轴标签和标题,并使用show()函数显示图像。

8. 更新电流标签:
result_label_i1.config(text=f"I1 = {i1:.2f} A")
result_label_i2.config(text=f"I2 = {i2:.2f} A")

这段代码更新result_label_i1result_label_i2两个标签的文本,显示计算得到的电流值。

9. 更新提示信息标签:
result_label.config(text="并联电路中的各部分信息")

这段代码更新result_label标签的文本,显示并联电路中的各部分信息。

10. 处理值错误的情况:
result_label_r1.config(text="")
result_label_r2.config(text="")
result_label_r_total.config(text="")
result_label_i1.config(text="")
result_label_i2.config(text="")
result_label.config(text="请输入有效的电阻值和电压值")

这段代码在发生ValueError异常时,将所有结果标签的文本清空,并显示一个提示信息,要求用户输入有效的电阻值和电压值。

以上是对代码功能的分段讲解,希望能够帮助您更好地理解每个部分的作用和功能。如有任何疑问,请随时提问。

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

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

相关文章

【CANoe使用大全】——Trace窗口

🙋‍♂️【CANoe使用大全】系列💁‍♂️点击跳转 文章目录 1.Trace作用2.Trace窗口打开方式2.1.Analysis—>Trace2.2.Measurement Setup ------> Trace 3.Trace窗口菜单栏介绍3.1. Detail View3.1. Statistic View3.3.Difference view3.4.Predefi…

【开发问题问题解决开发小技巧】通用资源管理01

【问题】新增应该输出提示但是出现乱码 查看会话发现是会话已结束,好家伙 重新登录会话依旧新增失败, 原来是提交的项没添加ORZ 【问题】会话保护 将会话保护改为“无限制” 执行修改提交但是一直在加载中,回滚后执行直接跳出来“未找到驱动程…

js打地鼠

文章目录 1实现效果2代码实现 1实现效果 游戏难度:简单,一般,困难,噩梦(控制setInterval的time参数) 按钮功能:结束(可以通过修改gameScore的值来修改判定结束的分数)&am…

MySQL十部曲之四:MySQL中的数据类型

文章目录 前言概述数字类型数字类型语法数字类型字面量十六进制字面量位字面量布尔字面量 数字类型的属性超出范围和溢出处理 时间和日期类型时间和日期类型语法DATE、DATETIME和TIMESTAMP的异同TIMESTAMP和DATETIME的自动初始化和更新时间和日期字面量 字符串类型字符串类型语…

知识圣殿,智慧熔炉

知识圣殿,智慧熔炉 知识殿堂,巍然屹立 一座灵魂熔炉,号称图书馆 万卷书香盈架,智慧如星河汇聚 每一册书页,流淌着人类文明的血脉 钢笔与墨水交织诗篇 思想发芽,真理绽放光焰 浩瀚知识海洋,波涛…

tensorboard+seaborn 画RL论文图片

概要 tensorboard记录数据,并保存为fie_name.csv 文件加载file_name.csv文件, 处理加载得到数据,然后通过seaborn 显示出来。 1. tensorboard 通常来说,我们一般会用 tensorboard 去记录一些数据。 所以我们先介绍一下 tensorboard 一些注意事项 seti…

mybatis-plus常用使用方法

** mybaits-plus常用使用方法 ** 常用三层分别继承方法 1.1mapper层&#xff08;接口定义层&#xff09;可以用BaseMapper<> 例如&#xff1a; 1.2.里面常用的封装方法有 1.3常用方法介绍 【添加数据&#xff1a;&#xff08;增&#xff09;】int insert(T entity);…

css不规则的文本环绕

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>不规则的文本环绕</title><style>.b…

性能测试混合业务场景

已知从生产环境中统计出的接口比例如下所示&#xff1a; 接口接口比例接口140%接口220%接口330%接口410% 场景一&#xff1a;以上接口无上下依赖关系&#xff0c;设计出容量场景 接口1比例如下&#xff1a; 接口2比例如下&#xff1a; 接口3比例如下&#xff1a; 接口4比例如…

HFSS实战(三)——过孔via TDR仿真

文章目录 一、模型的处理二、TDR仿真2.1 修改求解模式2.2增加求解设置 三、查看仿真结果3.1 查看TDR结果3.2 查看S参数结果 四、结果分析4.1上升时间tr对仿真的影响 附&#xff1a;工程链接 在上一讲中&#xff0c;主要是通过观察S参数确定via的优化是否达到目标。但S参数只能看…

AI嵌入式K210项目(21)-AI模型文件导入至TF卡

文章目录 前言一、模型文件二、方法1三、方法2总结 前言 上一章节介绍了使用MicroPython进行开发&#xff0c;IDE中有很多的示例教程&#xff0c;相信大家已经迫不及待的想试试了&#xff0c;里面人目标检测的例程需要调用训练好的模型文件&#xff0c;这一章介绍如何将AI模型…

关于MySQL的基本查询(多表查询等)

1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) ); 创建score表。SQL代码如下&#xff1a; CREATE…

25考研政治备考计划

各位小伙伴大家好&#xff0c;今天给大家分享的是25考研政治复习备考计划。 政治没有基础阶段&#xff0c;直接就是强化&#xff0c;强化的内容也就是听课&#xff0c;刷题。 【时间安排】 *7-9月中 徐涛老师或腿姐强化课&#xff0c;推荐刷肖1000 *9月中-10月中 背腿姐的背…

BLIP-2: 基于冻结图像编码器和大型语言模型的语言-图像预训练引导

BLIP-2: 基于冻结图像编码器和大型语言模型的语言-图像预训练引导 项目地址BLIP-2的背景与意义BLIP-2的安装与演示BLIP-2模型库图像到文本生成示例特征提取示例图像-文本匹配示例性能评估与训练引用BLIP-2Hugging Face集成 在语言-图像预训练领域&#xff0c;BLIP-2的出现标志着…

Mac M1 Parallels CentOS7.9 Deploy 禅道

禅道官网下载地址: https://www.zentao.net/download/max4.10-83276.html 一、官网下载 二、解压安装 将下载好的包传至CentOS7.9虚拟机 zhinian192 ~ % scp Downloads/ZenTaoPMS-max4.10-zbox_arm64.tar.gz root10.211.55.36:~ ZenTaoPMS-max4.10-zbox_arm64.tar.gz …

LabVIEW振动信号分析

LabVIEW振动信号分析 介绍如何使用LabVIEW软件实现希尔伯特-黄变换&#xff08;Hilbert-Huang Transform, HHT&#xff09;&#xff0c;并将其应用于振动信号分析。HHT是一种用于分析非线性、非平稳信号的强大工具&#xff0c;特别适用于旋转机械等复杂系统的振动分析。开发了…

VR漫游:赋予用户720度身临其境的沉浸式体验

如今&#xff0c;VR全景技术已经成为了千行百业中不可或缺的一部分&#xff0c;随着用户对交互式、沉浸式体验的需求不断加强&#xff0c;VR漫游逐渐取代了传统图片&#xff0c;为人们带来了流畅且完整的VR宣传观看体验。 VR实景漫游真实的展示了现场环境&#xff0c;不仅增加了…

【yaml 文件使用】pytest+request 框架中 yaml 配置文件使用

又来进步一点点~~ 背景&#xff1a;最近在学习pytestrequest框架写接口测试自动化&#xff0c;使用yaml文件配置更方便管理用例中的数据&#xff0c;这样更方便 yaml 介绍&#xff1a; 什么是 yaml 文件&#xff1a;YAML 是 “YAML Ain’t a Markup Language”&#xff08;Y…

Sublime的安装及汉化

sublime安装 官网sublime 点击Windows 下载参考&#xff1a;傻瓜式下载 sublime汉化 1&#xff09;安装 Sublime Text 4 成功后&#xff0c;点击菜单 【Tools】 -> 【Install Package Control】&#xff1b; 注意&#xff1a;安装包控件需要等待一会&#xff0c;点击可…

【mongoDB】文档 CRUD

目录 1.插入文档 批量插入&#xff1a; 2.查询文档 3.更新文档 4.删除文档 deleteOne() deleteMany() findOneAndDelete() 1.插入文档 可以使用 insert () 方法或者 save() 方法向集合中插入文档 语法如下&#xff1a; db.collection_name.insert(document) collectio…