【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 * r1v2 = 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 / r1i2 = 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异常时,将所有结果标签的文本清空,并显示一个提示信息,要求用户输入有效的电阻值和电压值。

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

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

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

相关文章

第二篇:数据结构与算法-链表

概念 链表是线性表的链式存储方式,逻辑上相邻的数据在计算机内的存储位置不必须相邻, 可以给每个元素附加一个指针域,指向下一个元素的存储位 置。 每个结点包含两个域:数据域和指针域,指针域存储下一个结点的地址&…

C/C++ 跨文件共享全局变量

目录 效果 项目 代码 下载 为了实现跨文件共享全局变量,我们可以使用 extern 关键字。extern 关键字用于声明一个变量,该变量在其他地方已经定义。它告诉编译器这个变量在其他文件中已经定义了,不需要重新分配内存空间,只需要…

C语言-指针的基本知识(上)

一、关于内存 存储器:存储数据器件 外存 外存又叫外部存储器,长期存放数据,掉电不丢失数据 常见的外存设备:硬盘、flash、rom、u盘、光盘、磁带 内存 内存又叫内部存储器,暂时存放数据,掉电数据…

蓝桥杯-sort排序(上)

sort排序 🎈1.算法说明🎈2.例题🔭2.1例题一🔭2.2例题二🔭2.3例题三🔭2.4例题四🔭2.5例题五🔭2.6例题六 🎈1.算法说明 🔎对于一个数组,通过对数组中…

Spring Security 存储密码之 JDBC

Spring Security的JdbcDaoImpl实现了UserDetailsService接口,通过使用JDBC提供支持基于用户名和密码的身份验证。 JdbcUserDetailsManager扩展了JdbcDaoImpl,通过UserDetailsManager接口提供UserDetails的管理功能。 当Spring Security配置为接受用户名/密码进行身份验证时,…

南卡Neo2评测:实力诠释骨传导耳机全能旗舰,细节展现匠心之作

前段时间朋友让我帮他寻找一款佩戴舒适、音质体验好的蓝牙耳机,因为比较忙所以一直把这件事搁置了,刚好这两天比较闲,所以也是在综合个人的经验和目前较为热门的一些品牌款式,决定帮他寻找一款骨传导耳机,因为骨传导耳…

JVM-字节码应用

一、字节码的应用远超你的想象 二、ASM介绍与读取字节码实战 用CoreAPI解析和TreeAPI都能做字节码解析,区别,TreeAPI必须读取完整字节码信息,才能做解析。 下面代码,使用CoreAPI做解析: package asm;public class MyM…

[已解决]504 Gateway Time-out 网关超时

文章目录 问题:504 Gateway Time-out 504 Gateway Time-out 网关超时思路解决 问题:504 Gateway Time-out 504 Gateway Time-out 网关超时 思路 网上的常规思路是修改nginx配置文件,增加请求执行时间,试过没有用 keepalive_timeout 600; fastcgi_con…

JVM系列-7内存调优

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术、JVM原理🔥如果感觉博主的文…

案例分享 | 助力数字化转型:嘉为科技项目管理平台上线

嘉为科技项目管理平台(一期)基于易趋(EasyTrack)进行实施,通过近一年的开发及试运行,现已成功交付上线、推广使用,取得了良好的应用效果。 1.关于广州嘉为科技有限公司(以下简称嘉为…

龙芯,启动!

本文为小白从购买龙芯3A6000主板、硬件安装、软件安装的简单教程。 1 购买 目前(2024年1月)最新的龙芯主板采用龙芯处理器3A6000和7A2000桥片设计的DTX主板,CPU主频可达2.5GHz,2个DDR4内存插槽。桥片内部集成GPU,支…

如何把openwrt的ipk软件包安装到ubuntu上

前提:都是arm64的架构的软件包。 下载openwrt的ipk软件包 1. 从https://pkgs.org/ 查找下载软件包: 本文以swconfig软件包为例,下载swconfig和相关的依赖软件包: swconfig_12_aarch64_cortex-a72.ipk libuci20130104_2021-10-2…

podman+centos和docker+alpine中作性能对比遇到的问题及解决

1.dockeralpine中遇到这个问题 这是由于缺少相关的配置和依赖造成的 通过以下命令在alpine中安装相关配置 apk add --no-cache build-base cairo-dev cairo cairo-tools jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev 2.alpine中python找…

C++——IO流

C语言中我们学习过文件IO的相关函数,那么在C中也一定有各种IO流的 函数或者功能,由我今天来简单介绍一下C中IO流的大致原理及使用。在C语言中我们经常会使用到scanf、printf、sscanf、sprintf等等来实现进程和文件之间数据的流动,在C中虽然由…

python黑马模块

1、使用内置模块 # import通过.使用模块内部的全部功能 """ import time print("ff") time. sleep(5) print("as")# 使用from 导入某个功能 from time import sleep print("ff") sleep(5) print("as")# 使用 * 导入全部…

taskflow 源码阅读笔记-1

之前写了一篇介绍Taskflow的短文:传送门 Taskflow做那种有前后依赖关系的任务管理还是不错的,而且他的源码里运用了大量C17的写法,觉得还是非常值得学习的,因此决定看一下他的源码,这里顺便写了一篇代码学习笔记。 概…

Amazon 亚马逊新玩具——在线购物试衣服“虚拟试穿”模型:Diffuse to Choose

这个模型拥有强大的能力,它能够将任何商品无缝地融入任何环境之中,确保商品与环境完美匹配。例如,你可以轻松地将在线商店中的椅子图片放入你客厅照片中,预览它实际摆放的效果。无论环境如何变化,该模型都能确保商品展…

Java复习系列之阶段二:数据库

1. 基础语法 1.1 DQL(数据查询语句) 执行顺序: from、join 、on、where、group by、having、select、distinct、order by、limit 1.2 DML(数据修改语言) 对数据表的增删改 insert into update set delete form 1.…

【JavaEE进阶】 #{}和${}

文章目录 🍃前言🌳#{}和${}使⽤🚩Interger类型的参数(基础数据类型)🎈使用#{}🎈使用${} 🚩String类型的参数使用🎈#{}使用🎈${} 🎍#{}和${}区别&a…

C++:引用

目录 概念: 引用的使用格式: 引用特性: 常引用 使用场景: 1、做参数 二级指针时的取别名 一级指针取别名 一般函数取别名 2、做返回值 函数返回值的原理: 引用的返回值使用: 引用和指针的对比&…