【K12】运用tk控件演示欧姆定律串联电阻小应用

上述代码是一个基于Python的图形用户界面(GUI)应用程序,用于演示欧姆定律。用户可以通过输入电阻值来计算电流,并在图形上显示结果。该程序使用了Tkinter库来创建GUI,matplotlib库来绘制图形,以及numpy库进行数值计算。
输出效果图:
在这里插入图片描述

使用该代码的好处有以下几点:

直观易用:该程序提供了图形界面,用户可以通过简单的输入和操作来了解欧姆定律的计算过程。
实时更新:程序能够实时更新电流、电压和电阻值的计算结果,以及在图形上显示相应的点。
可扩展性:该程序使用了模块化设计,可以根据需要添加更多的功能和计算方法。
可移植性强:由于该程序使用了Python语言编写,可以在不同操作系统和平台上运行,方便用户在不同环境中使用。

import tkinter as tk
from tkinter import ttk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

class App:
    def __init__(self, root):
        self.root = root
        self.resistance_value1 = tk.StringVar()
        self.resistance_value2 = tk.StringVar()  # New variable for second resistance value
        self.voltage = 10.0  # 假设电压为10V

        # 创建标签并添加到界面上
        label1 = tk.Label(root, text="R1=")
        label1.grid(row=0, column=0, sticky='w')  # 使用sticky参数来确保标签不会移动
        label2 = tk.Label(root, text="R2=")
        label2.grid(row=0, column=1, sticky='w')  # 使用sticky参数来确保标签不会移动

        self.entry1 = ttk.Entry(root, justify='center', textvariable=self.resistance_value1, width=6)
        self.entry1.grid(row=0, column=0)
        self.entry1.bind('<Return>', self.update_light_bulb)  # 绑定回车键事件

        self.entry2 = ttk.Entry(root, justify='center', textvariable=self.resistance_value2, width=6)
        self.entry2.grid(row=0, column=1)  # Place second entry on the right side
        self.entry2.bind('<Return>', self.update_light_bulb)  # 绑定回车键事件

        self.figure, self.ax = plt.subplots(figsize=(5, 4), dpi=100)
        self.canvas = FigureCanvasTkAgg(self.figure, self.root)
        self.canvas.draw()
        self.canvas.get_tk_widget().grid(row=1, columnspan=5)  # Adjust to fit both entries and the canvas

        self.resistance1 = 0
        self.resistance2 = 0
        self.current = 0

        self.ax.set_title("欧姆定律")

        self.update_graph()

    def update_light_bulb(self, event=None):
        new_value1 = self.resistance_value1.get()
        new_value2 = self.resistance_value2.get()

        if float(new_value1) == 0 or float(new_value2) == 0:
            print("错误: 电阻值不能为零")
            return  # 提前返回,不执行后续的代码

        self.resistance1 = float(new_value1)
        self.resistance2 = float(new_value2)
        self.current = self.voltage / (self.resistance1 + self.resistance2)  # Update current based on both resistances
        self.update_graph()

    def update_graph(self):
        if self.resistance1 == 0 and self.resistance2 == 0:
            return

        self.ax.clear()
        x_limit = max(self.voltage / (self.resistance1 + self.resistance2), self.resistance1 + self.resistance2)
        self.ax.set_xlim(0, x_limit + 5)  # Adjust x-axis limit based on both resistances combined
        self.ax.set_ylim(0, max(self.voltage, 1))

        # Plot both resistances and the combined current value (blue dot)
        self.ax.plot([self.resistance1, self.resistance2], [self.current, self.current], marker='o', color='blue')

        self.ax.set_xlabel('电阻/R')
        self.ax.set_ylabel('电流/I')
        self.ax.set_title('欧姆定律计算演示器')

        text = f"I={self.current:.2f}, U={self.voltage:.2f}, R1={self.resistance1:.2f}, R2={self.resistance2:.2f}"
        self.ax.text(0.05, 0.9, text, verticalalignment='top', horizontalalignment='left', transform=self.ax.transAxes,
                     color='red')

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值