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

news2024/11/18 19:33:29

程序源码

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

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

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

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

相关文章

Kotlin Multiplatform项目推荐 | 太空人分布图

Kotlin Multiplatform项目推荐 | 太空人分布图 项目简介 Kotlin Multiplatform项目是一种跨平台开发技术,它可以同时使用SwiftUI、Jetpack Compose、Compose for Wear OS、Compose for Desktop、Compose for Web、Kotlin/JS React等客户端框架,并且使…

【Linux】-cp模型

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

IDEA 安装阿里Java编码规范插件

1.File>Settings 2.安装之后重启 开发过程中如果有不符合规范的地方,会自动出现提示

单片机学习笔记---独立按键控制LED状态

上一节学习的是独立按键控制LED亮灭 这一节我们先来讲一下按键的抖动: 对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以…

go slice 基本用法

slice(切片)是 go 里面非常常用的一种数据结构,它代表了一个变长的序列,序列中的每个元素都有相同的数据类型。 一个 slice 类型一般写作 []T,其中 T 代表 slice 中元素的类型;slice 的语法和数组很像&…

网络分层和网络原理之UDP和TCP

温故而知新 目录 网络分层 应用层 http协议 传输层 介绍 UDP协议 TCP协议 网络层 数据链路层 物理层 网络分层 一. 应用层 应用程序 现成的应用层协议有超文本协议http(不仅仅有文本). http协议 http://t.csdnimg.cn/e0e8khttp://t.csdnimg.cn/e0e8k 自定义应…

Linux 挂载读取、卸载 ntfs格式硬盘

windows常用的ntfs硬盘分区格式,在linux通常不能直接读取,不过挂载也是非常容易 一、挂载ntfs分区 1.安装 apt-get install ntfs-3g2.查看现在接上的硬盘 fdisk -l可以找到类似如下的,会显示microsoft basic data 3.创建挂载的目录 创…

Android P 背光机制流程分析

在android 9.0中,相比android 8.1而言,背光部分逻辑有较大的调整,这里就对android P背光机制进行完整的分析。 1.手动调节亮度 1.1.在SystemUI、Settings中手动调节 在界面(SystemUI)和Settings中拖动进度条调节亮度时,调节入口…

Topaz Video AI:无损放大,让你的视频更清晰!

在当今的数字时代,视频内容的重要性越来越受到人们的关注。无论是在社交媒体上分享生活片段,还是在商业领域中制作宣传视频,人们都希望能够展现出更高质量的视频内容。 然而,由于各种原因,我们经常会面临一个问题&…

MongoDB日期存储与查询、@Query、嵌套字段查询实战总结

缘由 MongoDB数据库如下: 如上截图,使用MongoDB客户端工具DataGrip,在filter过滤框输入{ profiles.alias: 逆天子, profiles.channel: },即可实现昵称和渠道多个嵌套字段过滤查询。 现有业务需求:用Java代码来查询…

mysql 存储过程学习

存储过程介绍 1.1 SQL指令执行过程 从SQL执行的流程中我们分析存在的问题: 1.如果我们需要重复多次执行相同的SQL,SQL执行都需要通过连接传递到MySQL,并且需要经过编译和执行的步骤; 2.如果我们需要执行多个SQL指令,并且第二个SQL指令需要…

哪吒汽车与经纬恒润合作升级,中央域控+区域域控将于2024年落地

近日,在2024哪吒汽车价值链大会上,哪吒汽车与经纬恒润联合宣布合作升级,就中央域控制器和区域域控制器展开合作,合作成果将在山海平台新一代车型上发布。 哪吒汽车首席技术官戴大力、经纬恒润副总裁李伟 经纬恒润在智能驾驶领域拥…

数据结构(绪论+算法的基本概念)

文章目录 一、绪论1.1、数据结构的基本概念1.2、数据结构三要素1.2.1、逻辑结构1.2.2、数据的运算1.2.3、物理结构(存储结构)1.2.4、数据类型和抽象数据类型 二、算法的基本概念2.1、算法的特性2.2、“好”算法的特质2.2.1、算法时间复杂度2.2.2、算法空…

一款强大的矢量图形设计软件:Adobe Illustrator 2023 (AI2023)软件介绍

Adobe Illustrator 2023 (AI2023) 是一款强大的矢量图形设计软件,为设计师提供了无限创意和畅行无阻的设计体验。AI2023具备丰富的功能和工具,让用户可以轻松创建精美的矢量图形、插图、徽标和其他设计作品。 AI2023在界面和用户体验方面进行了全面升级…

【GTK】GtkApplicationWindow/GtkApplication

一、GtkApplicationWindow 在GTK(GIMP Toolkit)应用程序开发中,并不是每个GTK程序都必须有一个GtkApplicationWindow,但大多数基于GTK的图形界面应用程序都会使用GtkApplicationWindow,因为它是一个方便的类&#xff…

幻兽帕鲁搭建私服,一键更新方法

看着帕鲁这么火,估计更新会变为常态了,如果有自己搭建私服的话,跟着我下面的方法去进行更新吧! 如果你还没有自己的私服,快去三五十搞一个吧,只需三五分钟,叫上你的小伙伴一起去搞起来吧 只需3分…

EXCEL VBA抓取网页JSON数据并解析

EXCEL VBA抓取网页JSON数据并解析 链接地址: https://api.api68.com/CQShiCai/getBaseCQShiCaiList.do?lotCode10036&date2024-01-26 Sub test() On Error Resume Next Sheet.Select Sheet1.Cells.ClearContents [a1:g1] Split("preDrawIssue|preDrawTi…

呼叫中心语音质检解决方案-苏州磐石云

呼叫中心语音质检解决方案是一种利用自动语音识别(ASR)和自然语言处理(NLP)技术来分析和评估呼叫录音的工具。它可以帮助呼叫中心监控和改进客户服务质量,提供以下功能和特点: 语音转文本:利用A…

dd 命令创建10G大小的文件

您可以使用Linux命令行工具dd来创建10GB大小的文件。以下是创建10GB文件的命令:dd if/dev/zero offile.img bs1G count10 在上述命令中,if参数指定输入文件为/dev/zero,这是一个特殊的文件,读取它会返回空字符(即零&am…

通过CanvasRenderer.SetColor和Image.color修改UI组件颜色的区别

1)通过CanvasRenderer.SetColor和Image.color修改UI组件颜色的区别 2)OPPO相关机型没法在Unity启用90或120FPS 3)手机输入法中的emoji 4)Unity Application Patching怎么用 这是第369篇UWA技术知识分享的推送,精选了UW…