tkinter 桌面GUI简单计算功能 开发文档

Tkinter是Python的标准GUI(图形用户界面)工具包,用于创建和管理图形用户界面应用程序。Tkinter提供了一组丰富的组件和工具,使开发者能够轻松地构建具有按钮、标签、文本框、菜单等各种交互元素的用户界面。通过Tkinter,开发者加粗样式可以实现用户友好的界面设计,并与用户进行交互,从而创建各种类型的桌面应用程序

* xxx * - 我是为了重点突出 * * 所包裹内容的意思 例如 * a = 11 * 我为了说明 a = 11 这件事,无特殊含义

  1. 导入库 (不重要)

    • import tkinter as tk
      from tkinter import ttk
      from tkinter import messagebox
      
  2. 创建主窗口

    • root = tk.Tk()
      # 标题
      root.title("莲藕线性回归价格预测器")
      root.geometry("600x400")  # 设置窗口大小为600x400像素
      
  3. 创建一个框架(建造一个框框类似css 中的盒子)

    • frame = ttk.Frame(root, padding="20")  #  这行代码创建了一个框架,并将其放置在指定的根窗口(root)内,padding="20"
      # padding="20" 表示在框架周围添加了 20 像素的内边距
      
      # sticky=(tk.W, tk.E, tk.N, tk.S) sticky参数用于指定控件在其所在的单元格中对齐方式,tk.W, tk.E, tk.N, tk.S(东西南北都对对齐,东西对齐说明水平分布,南北对齐说明垂直分布,整体来说位于框架中心位置)
      frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
      
      

添加了 20 像素的内边距意味着在框架的边界和其内部的控件之间有一个 20 像素的空间。这样做的目的是为了让框架内部的内容与框架的边界之间有一定的间隔

  1. 创建提示标签和输入框

    • label_temperature = ttk.Label(frame, text="请输入温度 (°C):")   # ttk.Label 被用来创建标签控件 **提示信息**,*frame* 将创建标签控件放置在名为frame的框架中,frame是该标签的父容器
      label_temperature.grid(row=0, column=0, pady=5)  # pady=5 表示在垂直方向上增加 5像素的外边距,标签框架与其他控件之间在上下位置上的间距为5 
      entry_temperature = ttk.Entry(frame)  # * Entry *  创建了一个输入框(Entry)控件,并将其放置在frame框架中,同样frame是该标签的父容器
      entry_temperature.grid(row=0, column=1, pady=5) # 同样垂直方向增加5像素的外边框,表明输入框和frame盒子在上下位置上的间距为5像素
      
      
  2. 创建预测按钮(执行函数是)

    • # 预测按钮
      button_predict = ttk.Button(frame, text="预测价格", command=predict_price)  # * ttk.Button * 生成按键 、* text="预测价格" *按钮上显示的文本是"预测价格"、* command=predict_price *  command 是ttk的一个参数,用于接受当按钮被点击时要调用的函数(本次中是 *predict_price() *)或方法,具体而言command 选项允许你将一个函数或方法绑定到按钮的点击事件上。当用户点击按钮时,与 command 选项关联的函数或方法将被调用,从而执行特定的操作或处理逻辑
      button_predict.grid(row=1, column=0, columnspan=2, pady=10)
      
  3. 创建预测结果显示标签

    • # 结果标签
      result_var = tk.StringVar()  # chatgpt
      label_result = ttk.Label(frame, textvariable=result_var)  # *textvariable* textvariable 是tk的一个参数,用于指定控件显示的文本内容所对应的变量(这里是 result_var),当你将一个变量赋给 textvariable 选项时,该控件会动态地显示该变量的值。这意味着当变量的值发生变化时,控件上显示的文本内容也会相应地更新,result_var  接受的是我计算的返回结果,我在输入框输入一个符合要求的平均气温会返回一个计算的预测结果
      label_result.grid(row=2, column=0, columnspan=2, pady=10)
      
  4. 启动主控件

    • # 运行主循环
      root.mainloop()   # *root * 最外层的盒子所有空间都在这个盒子中
      
  5. 核心功能(本质作用)

    • # 本质是为了给一个平均气温让其经过自定义计算规则计算后返回一个预测值
      很简单
      y = kx + b      # k = 0.0825747948982792   b = 5.294336835985737   这些都是自定义好的 , x 是我要输入的平均气温。
      **重点**是要让其重复执行,我给一个值就执行一次,而不是执行完一次,我又要运行一次,再给一个值  
      重复执行这一点在 command=predict_price 中得以实现,每当我在输入框输入平均气温值后,点击按钮的同时它就会自动调用计算函数predict_price()
      def predict_price():
          try:
              temp_c = float(entry_temperature.get())
              predicted_price = intercept + slope * temp_c
              result_var.set(f"预测莲藕价格: {predicted_price:.2f} 元")
          except ValueError:
              messagebox.showerror("错误", "请输入有效的温度值!")  # * messagebox.showerror * 显示错误消息框函数,在这里面接受了两个参数,第一个参数消息框标题,第二个参数消息框提示信息(这里是请输入有效的温度值!)
       
      predict_price()  函数中我认为最重要的是 result_var.set() 的作用  我也不知道你问 chatgpt
      
      
      # try 缩进内容的作用   try 关键字  包裹错误不至于报错,导致程序在 try 包裹中的任意一个位置停止下来
      trypass   # pass  
      # except 缩进内容的作用 except 关键字 用于捕获异常并对其进行处理,我在这里做了 如果输入值不符合规则(不是数值或者浮点数,或者没有找到这个平均气温值就会执行except 关键字下面的代码)
      except:
         pass
      
      

      在这里插入图片描述
      结果:
      在这里插入图片描述


完整代码

重点不在于如何绘制这个交互式GUI而是后面计算预测结果的执行逻辑,当然这个计算方法很简单

 predicted_price = intercept + slope * temp_c
 result_var.set(f"预测莲藕价格: {predicted_price:.2f} 元")
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
# 确保这里导入的是你已经计算好的模型参数
slope = 0.0825747948982792
intercept = 5.294336835985737
def predict_price():
    try:
        temp_c = float(entry_temperature.get())
        predicted_price = intercept + slope * temp_c
        result_var.set(f"预测莲藕价格: {predicted_price:.2f} 元")
    except ValueError:
        messagebox.showerror("错误", "请输入有效的温度值!")

# 创建主窗口
root = tk.Tk()
root.title("莲藕线性回归价格预测器")
root.geometry("600x400")  # 设置窗口大小为600x400像素
# 创建一个框架来组织控件
frame = ttk.Frame(root, padding="20")
frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))

# 温度标签和输入框
label_temperature = ttk.Label(frame, text="请输入温度 (°C):")
label_temperature.grid(row=0, column=0, pady=5)
entry_temperature = ttk.Entry(frame)
entry_temperature.grid(row=0, column=1, pady=5)

# 预测按钮
button_predict = ttk.Button(frame, text="预测价格", command=predict_price)
button_predict.grid(row=1, column=0, columnspan=2, pady=10)

# 结果标签
result_var = tk.StringVar()
label_result = ttk.Label(frame, textvariable=result_var)
label_result.grid(row=2, column=0, columnspan=2, pady=10)

# 运行主循环
root.mainloop()



感谢大家对小弟的支持,我做了一个玩玩,我同学也想了解一下,找我要,帮他同学先注释一下,自己也学习一遍,希望帮助到大家。

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

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

相关文章

<2024年5月软考高项极限冲刺>《2 考试知识块》

🪸🪸把你所学串起来,欢迎订阅。🪸🪸 每章附独家脑图,原图。 冲刺 冲刺 冲刺 1 看下面的图,让你知道你要学习的全部知识是什么 2 章节解析 我们考试的重点是项目管理知识,但是因…

【深度学习基础(2)】深度学习之前:机器学习简史

文章目录 一. 深度学习的起源1. 概率建模--机器学习分类器2. 早期神经网络--反向传播算法的转折3. 核方法 -- 忽略神经网络4. 决策树、随机森林和梯度提升机5. 神经网络替代svm与决策树 二. 深度学习与机器学习有何不同 可以这样说,当前工业界所使用的大部分机器学习…

自适应医疗决策框架 MDAgents:问题复杂度评估 + 医疗决策 + 多智能体协作

自适应医疗决策框架 MDAgents:问题复杂度评估 医疗决策 多智能体协作 提出背景MDAgents 拆解解法:MDAgents框架处理医疗问题3.1 查询复杂性评估例子:糖尿病患者的医疗查询 3.2 专家招募3.3 医疗协作与改良3.4 决策制定 分阶段决策1. 问题复…

优质短视频内容进阶SOP课

本课程致力于提升短视频内容创作标准化操作流程(SOP)。学员将学习视频策划、拍摄技巧、剪辑方法等,打造高质量短视频内容。通过实例分析和实践演练,学员将掌握优质内容制作的关键步骤,提升影响力和吸引力,成…

机器人系统ros2-开发实践04-ROS 2 启动文件管理大型项目的最佳实践

机器人上的大型应用通常涉及多个互连的节点,每个节点可以有许多参数。海龟模拟器中模拟多只海龟就是一个很好的例子。海龟模拟由多个海龟节点、世界配置以及 TF 广播器和监听器节点组成。在所有节点之间,存在大量影响这些节点的行为和外观的 ROS 参数。 …

浏览器安装路径位置的查看、指定网址快捷方式的创建

浏览器安装路径位置的查看、指定网址快捷方式的创建 浏览器安装路径位置的查看 法一、属性查看法 右键点击浏览器的桌面图标,选择“属性”,“快捷方式”页中的“目标”框中可见. 以Microsoft Edge浏览器为例,参见下图: 法二、地…

基于Spring Boot的心灵治愈交流平台设计与实现

基于Spring Boot的心灵治愈交流平台设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 系统功能界面图,在系统首页可以查看首页…

远程桌面报错:【出现验证错误。要求的函数不受支持】

WinR 输入【gpedit.msc】回车 依次打开 计算机配置----管理模板-----系统-----凭据分配---加密数据库修正 选择【已启用】,下拉菜单选择【易受攻击】

ROS1快速入门学习笔记 - 014launch启动文件的使用方法

一、定义 Launch文件&#xff1a;通过XML文件实现多节点的配置和启动&#xff08;可自动启动ROSMaster&#xff09; 二、常用语法 1. 根标签 <launch> - launch文件中的根元素采用<launch>标签定义 <launch>表示开始&#xff1b;<launch>表示结束&…

富文本编辑器CKEditor4简单使用-08(段落首行缩进插件 + 处理粘贴 Microsoft Word 中的内容后保持原始内容格式(包括首行缩进))

富文本编辑器CKEditor4简单使用-08&#xff08;段落首行缩进插件 处理粘贴 Microsoft Word 中的内容后保持原始内容格式&#xff08;包括首行缩进&#xff09;&#xff09; 1. 缩进&#xff0c;特殊方式处理——修改原工具栏里的增加缩进量2 缩进&#xff0c;插件处理——不含…

[Meachines][Hard]Office

Main $ nmap -sC -sV 10.10.11.3 --min-rate 1000 CMS:joomla # echo 10.10.11.3 office.htb DC.office.htb>>/etc/hosts 在扫描报告中,可以看到robots.txt目录泄露 http://10.10.11.3/administrator/index.php 根据CVE-2023-23752存在未授权访问 http://10.10.11.3/…

【数学建模】2024五一数学建模C题完整论文代码更新

最新更新&#xff1a;2024五一数学建模C题 煤矿深部开采冲击地压危险预测&#xff1a;建立基于多域特征融合与时间序列分解的信号检测与区间识别模型完整论文已更新 2024五一数学建模题完整代码和成品论文获取↓↓↓↓↓ https://www.yuque.com/u42168770/qv6z0d/gyoz9ou5upv…

hive分区上传数据

hive分区上传数据 目录 hive分区上传数据 一、开启HIVE中分区表支持中文字段 二、分区表操作 1.建表语句 2.分区表插入数据 3.查询分区 4.删除分区 5.恢复被删除分区 6.添加分区 7.创建多级分区&#xff08;插入数据与单级分区类似&#xff09; 一、开启HIVE中分区表支…

探索高级聚类技术:使用LLM进行客户细分

在数据科学领域&#xff0c;客户细分是理解和分析客户群体的重要步骤。最近&#xff0c;我发现了一个名为“Clustering with LLM”的GitHub仓库&#xff0c;它由Damian Gil Gonzalez创建&#xff0c;专门针对这一领域提供了一些先进的聚类技术。在这篇文章中&#xff0c;我将概…

Linux下top命令指标说明

目录 Linux下top命令指标说明1. 概览2. CPU利用率3. 内存利用率4. 进程信息 Linux下top命令指标说明 在Linux系统中&#xff0c;top 命令是一个用于实时监视系统运行状态的工具。通过 top 命令&#xff0c;我们可以了解系统的负载情况、CPU利用率、内存使用情况以及各个进程的…

cmake的使用方法: 多个源文件的编译

一. 简介 前面一篇文章学习了针对只有一个 .c源文件&#xff0c;如何编写 CMakeLists.txt内容&#xff0c;从而使用 cmake工具如何编译工程。文章如下&#xff1a; cmake的使用方法: 单个源文件的编译-CSDN博客 本文学习针对 多个 .c源文件&#xff0c; CMakeLists.txt文件如…

【算法设计与分析】实验报告c++实现(矩阵链相乘问题、投资问题、背包问题、TSP问题、数字三角形)

一、实验目的 1&#xff0e;加深学生对动态规划算法设计方法的基本思想、基本步骤、基本方法的理解与掌握&#xff1b; 2&#xff0e;提高学生利用课堂所学知识解决实际问题的能力&#xff1b; 3&#xff0e;提高学生综合应用所学知识解决实际问题的能力。 二、实验任务 1、…

Mac环境下ollama部署和体验

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 关于ollama ollama和LLM&#xff08;大型语言模型&#xff09;的关系&#xff0c;类似于docker和镜像&#xff0c;可以在ollama服务中管理和运行各种LLM&…

Java | Leetcode Java题解之第63题不同路径II

题目&#xff1a; 题解&#xff1a; class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int n obstacleGrid.length, m obstacleGrid[0].length;int[] f new int[m];f[0] obstacleGrid[0][0] 0 ? 1 : 0;for (int i 0; i < n; i) {for (i…

spring boot学习第十八篇:使用clickhouse

1、pom.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://…