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

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

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值