程序源码
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_r1
和entry_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_r1
、result_label_r2
和result_label_r_total
三个标签的文本,显示计算得到的电阻值。
4. 计算电压和电流:
u = float(entry_u.get())
i1 = u / r1
i2 = u / r2
这段代码从entry_u
输入框中获取用户输入的电压值,并根据欧姆定律计算电流值i1
和i2
。
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_i1
和result_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
异常时,将所有结果标签的文本清空,并显示一个提示信息,要求用户输入有效的电阻值和电压值。
以上是对代码功能的分段讲解,希望能够帮助您更好地理解每个部分的作用和功能。如有任何疑问,请随时提问。