【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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker 构建应用

docker 应用程序开发手册 开发 docker 镜像 Dockerfile 非常容易定义镜像内容由一系列指令和参数构成的脚本文件每一条指令构建一层一个 Dockerfile 文件包含了构建镜像的一套完整指令指令不区分大小写&#xff0c;但是一般建议都是大写从头到尾按顺序执行指令必须以 FROM 指…

大型语言模型 (LLM)全解读

一、大型语言模型&#xff08;Large Language Model&#xff09;定义 大型语言模型 是一种深度学习算法&#xff0c;可以执行各种自然语言处理 (NLP) 任务。 大型语言模型底层使用多个转换器模型&#xff0c; 底层转换器是一组神经网络。 大型语言模型是使用海量数据集进行训练…

P1042 [NOIP2003 普及组] 乒乓球 Java版最简单题解!

为什么说最简单&#xff0c;因为本人就是一个算法小白&#xff0c;只学过一点数据结构&#xff0c;打算备战蓝桥杯的&#xff0c;网上说备战蓝桥杯就去刷洛谷&#xff0c;早有听闻洛谷很难&#xff0c;今天一看算是真的被打醒了&#xff0c;对于小白是真的太难了。(;༎ຶД༎ຶ…

uni-app 微信小程序之红包雨活动

文章目录 1. 页面效果2. 页面样式代码 1. 页面效果 GIF录屏有点卡&#xff0c;实际比较丝滑 每0.5s掉落一个红包控制4s后自动移除红包点击红包消除红包&#xff08;或者自行1&#xff0c;或者弹窗需求&#xff09; 2. 页面样式代码 <!-- 红包雨活动 --> <template>…

拦截器的简单使用

拦截器的简单使用 拦截器的使用创建拦截器preHandle 目标方法执行前执行postHandle 目标方法执行后执行afterCompletion 视图渲染后执行 拦截器使用场景返回值注册拦截器运用拦截器 拦截器的使用 创建拦截器 首先,我们需要创建一个拦截器器的类,并且需要继承自HandlerIntercep…

Linux系统优化要义

这里不敢说 linux优化奥义&#xff0c;主要是本文比较浅显&#xff0c;适合普通开发相关人员去读 linux作为服务器系统的王者&#xff0c;以稳定性著称&#xff0c;但对于不同的“应用场景”&#xff0c;相关配置还需调整&#xff0c;才能保证业务稳定性。以下是相关总结 IO优…

快快销ShopMatrix 分销商城多端uniapp可编译5端-代理商收益管理:差价奖励和销售额统计

代理商收益管理是一种针对代理商的利润分配模式&#xff0c;主要通过差价奖励和销售额统计来实现。这种模式的核心思想是通过激励代理商的销售行为&#xff0c;提高代理商的积极性和销售效率&#xff0c;从而实现整个销售网络的增长。 差价奖励是代理商收益管理中的一种常见方…

兄弟DCP-7057黑白激光多功能一体机加粉后清零方法

硒鼓加粉机器上清零&#xff0c;方法如下&#xff1a; 打开安装硒鼓的前盖。按“清除”键&#xff0c;显示“更换硒鼓”。不用管提示&#xff0c;接着按“启用Start”&#xff0c;再按“”&#xff0c;屏幕上显示“01”。继续按“”&#xff0c;直到屏幕上显示“11”。按“OK”…

E5071C 是德科技网络分析仪

181/2461/8938产品概述&#xff1a; E5071C ENA 矢量网络分析仪&#xff0c;9 kHz 至 20 GHz&#xff0c;配有增强型 TDR 测量选件。 E5071C 是大规模无源元器件测试的理想解决方案。 它具有出色的测量性能&#xff0c;有助于提高测试吞吐量&#xff0c;尤其是与 E5092A 多端…

Discuz论坛搭建:Linux宝塔面板一键部署,固定地址畅享公网访问

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 安装基础环境二. 一键部署Discuz三. 安装cpolar工具四. 配置域名访问Discuz…

【小白教程】幻兽帕鲁服务器一键搭建 | 支持更新 | 自定义配置

幻兽帕鲁刚上线就百万在线人数&#xff0c;官方服务器的又经常不稳定&#xff0c;所以这里给大家带来最快捷的搭建教程&#xff0c;废话不多说直接开始。 步骤一&#xff1a;准备服务器 服务器建议 Linux 系统&#xff0c;资源占用低&#xff0c;而且一键脚本只需要一条命令&am…

架构篇27:如何设计计算高可用架构?

文章目录 主备主从集群小结计算高可用的主要设计目标是:当出现部分硬件损坏时,计算任务能够继续正常运行。因此计算高可用的本质是通过冗余来规避部分故障的风险,单台服务器是无论如何都达不到这个目标的。所以计算高可用的设计思想很简单:通过增加更多服务器来达到计算高可…

AI大模型开发架构设计(5)——人人能学会的Llama-2大模型微调

文章目录 人人能学会的Llama-2大模型微调1 什么是Llama-2以及关键特性分析什么是Llama-2?Llama-2关键特性分析2 Llama-2微调全流程剖析为什么要微调Llama-2?Llama-2微调全流程3 基于Llama-2微调3个应用案例案例1:电子游戏评价数据生成文本数据集合案例2:利用Llama-2微调模型…

Android如何通过按钮实现页面跳转方法

Hello大家好&#xff01;我是咕噜铁蛋&#xff01;在Android应用开发中&#xff0c;页面跳转是一项基本且常见的功能。通过按钮实现页面跳转可以为用户提供更好的交互体验&#xff0c;使应用更加灵活和易用。本文将介绍Android Studio中如何通过按钮实现页面跳转的方法&#xf…

OJ_日期问题

基础&#xff1a;已知某天的日期求下一天的日期 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> using namespace std;void NextDay(int &year, int &month, int &day) {//存储一下 月份和天数的对应关系int dayOfMonth[] {…

Linux:命名管道及其实现原理

文章目录 命名管道指令级命名管道代码级命名管道 本篇要引入的内容是命名管道 命名管道 前面的总结中已经搞定了匿名管道&#xff0c;但是匿名管道有一个很严重的问题&#xff0c;它只允许具有血缘关系的进程进行通信&#xff0c;那如果是两个不相关的进程进行通信&#xff0…

C# Graphics对象学习

Graphics对象用于进行绘制&#xff1b; 从哪个对象获取的Graphics&#xff0c;然后进行绘制&#xff0c;就绘制到该对象上&#xff1b; 从位图获取Graphics&#xff0c;然后进行绘制&#xff0c;绘制到该位图上&#xff1b; 从某个控件获取Graphics&#xff0c;然后绘制&…

el-tree基础的树形节点设置节点不能选中高亮出来,对已经选中的节点设置disabled,对当前节点刚选中后设置禁用disabled

一、 el-tree基础的树形节点设置节点不能选中高亮出来 需求 我们使用element-ui或者element-plus的时候会遇到树形控件的使用&#xff0c;我们使用树形控件会限制有的节点不让选中和高亮出来&#xff0c;这个时候需要我们做限制。在实现中我们发现了element-ui和element-plus…

基于C语言的趣味游戏之五子棋

目录 趣味五子棋游戏 第一步 text.c文件 第二步 game.h文件 第三步 初始化 打印棋盘 玩家输入 电脑输入 判断输赢 game.c 趣味五子棋游戏 第一步 先写菜单&#xff0c;然后在主函数里调用&#xff0c;由于这是一个可以重复的游戏所以将do while循环里调用menu函数。…

《WebKit技术内幕》学习之十五(2):Web前端的未来

2 嵌入式应用模式 2.1 嵌入式模式 读者可能会奇怪本章重点表达的是Web应用和Web运行平台&#xff0c;为什么会介绍嵌入式模式&#xff08;Embedded Mode&#xff09;呢&#xff1f;这是因为很多Web运行平台是基于嵌入式模式的接口开发出来的&#xff0c;所以这里先解释一下什…