温度计测量水温的过程要满足如下条件:

1.不能碰烧杯底。

2.不能碰烧杯壁。

设计一款动手实践上面过程的软件,就是接下来要完成的~

我们先看一下效果:

如何用python制作温度计模拟器 python项目小发明

我们可以看到,烧杯和温度计要满足一定的位置关系才可以读取。

那么要如何实现这样一个功能呢?

首先我们先上网查找一些素材:

完事用下面的语句进行插入:

        self.window.axis_canvas.im1 = Image.open("./烧杯.png")self.window.axis_canvas.img1 = ImageTk.PhotoImage(self.window.axis_canvas.im1)self.window.axis_canvas.imLabel1 = tk.Label(self.window.axis_canvas, image=self.window.axis_canvas.img1)self.window.axis_canvas.imLabel1.place(x=self.x1, y=self.y1, width=204, height=231)self.window.axis_canvas.imLabel1.bind("<Button-1>", self.key1)self.window.axis_canvas.im2 = Image.open("./温度计.jpg")self.window.axis_canvas.img2 = ImageTk.PhotoImage(self.window.axis_canvas.im2)self.window.axis_canvas.imLabel2 = tk.Label(self.window.axis_canvas, image=self.window.axis_canvas.img2)self.window.axis_canvas.imLabel2.place(x=self.x2, y=self.y2, width=49, height=240)self.window.axis_canvas.imLabel2.bind("<Button-1>", self.key2)

展示并介绍完整代码:

from tkinter import *
from tkinter import messagebox
import tkinter as tk
import threading
import time
import os
from pymouse import PyMouse
import pyHook
from PIL import Image,ImageTk
def onMouseEvent(event):return event.Position
def mouse_detector():global MOUSE_POShm = pyHook.HookManager()hm.MouseAll = onMouseEventwhile True:MOUSE_POS=list(PyMouse().position())time.sleep(0.02)
class basedesk():#底板def __init__(self, master):self.master = masterself.master.title("温度计模拟器")self.master.configure(bg='#B1FFF9')self.master.geometry("1000x600")mainwindow(self.master)
class mainwindow():#主界面def __init__(self, master):self.master = masterself.window = tk.Frame(self.master, bg='#e5ffe5')self.window.place(x=0,y=0,width=1000,height=600)self.window.showname_label=tk.Label(self.window,text="温度计模拟器",fg='#26734d', bg='#ffe5ff',font=("Helvetic",60,"bold"),relief=RAISED).place(x=0, y=10,width=1000, height=150)self.window.enter_btn=tk.Button(self.window,text="开始",bg='#ffffe5',fg='#333399',font=("Helvetic", 60, "bold"),command=self.changetofunction).place(x=360, y=300,width=250, height=150)def changetofunction(self,):self.window.destroy()functionwindow(self.master)
class functionwindow():def __init__(self, master):self.master = masterself.window = tk.Frame(self.master, bg='#e5f9ff')self.window.place(x=0, y=0, width=1000, height=600)self.x1=50self.y1=50self.boardlock1 = Trueself.checklock1 = 0self.x2=350self.y2=50self.boardlock2 = Trueself.checklock2 = 0self.all_check=0self.all_check2 = 0self.init_canvas1()self.window.enter_btn=tk.Button(self.window,text="读取",bg='#ffffe5',fg='#333399',font=("Helvetic", 60, "bold"),command=self.start).place(x=660, y=500,width=250, height=80)#由于需要保证点击的元件要放到最上面,故设置了两个初始化画布的方法def init_canvas1(self):self.window.axis_canvas = tk.Canvas(self.window, bg='white')self.window.axis_canvas.place(x=50, y=50, width=900, height=430)self.window.axis_canvas.im1 = Image.open("./烧杯.png")self.window.axis_canvas.img1 = ImageTk.PhotoImage(self.window.axis_canvas.im1)self.window.axis_canvas.imLabel1 = tk.Label(self.window.axis_canvas, image=self.window.axis_canvas.img1)self.window.axis_canvas.imLabel1.place(x=self.x1, y=self.y1, width=204, height=231)self.window.axis_canvas.imLabel1.bind("<Button-1>", self.key1)self.window.axis_canvas.im2 = Image.open("./温度计.jpg")self.window.axis_canvas.img2 = ImageTk.PhotoImage(self.window.axis_canvas.im2)self.window.axis_canvas.imLabel2 = tk.Label(self.window.axis_canvas, image=self.window.axis_canvas.img2)self.window.axis_canvas.imLabel2.place(x=self.x2, y=self.y2, width=49, height=240)self.window.axis_canvas.imLabel2.bind("<Button-1>", self.key2)def init_canvas2(self):self.window.axis_canvas = tk.Canvas(self.window, bg='white')self.window.axis_canvas.place(x=50, y=50, width=900, height=430)self.window.axis_canvas.im2 = Image.open("./温度计.jpg")self.window.axis_canvas.img2 = ImageTk.PhotoImage(self.window.axis_canvas.im2)self.window.axis_canvas.imLabel2 = tk.Label(self.window.axis_canvas, image=self.window.axis_canvas.img2)self.window.axis_canvas.imLabel2.place(x=self.x2, y=self.y2, width=49, height=240)self.window.axis_canvas.imLabel2.bind("<Button-1>", self.key2)self.window.axis_canvas.im1 = Image.open("./烧杯.png")self.window.axis_canvas.img1 = ImageTk.PhotoImage(self.window.axis_canvas.im1)self.window.axis_canvas.imLabel1 = tk.Label(self.window.axis_canvas, image=self.window.axis_canvas.img1)self.window.axis_canvas.imLabel1.place(x=self.x1, y=self.y1, width=204, height=231)self.window.axis_canvas.imLabel1.bind("<Button-1>", self.key1)#用来检测是否可以读取数据def start(self):if self.x1<self.x2<self.x1+50:messagebox.showerror("错误",'温度计不可以碰烧杯左壁')returnif self.x1+120<self.x2<self.x1+170:messagebox.showerror("错误",'温度计不可以碰烧杯右壁')returnif self.y2<self.y1<self.y2+50:messagebox.showerror("错误", '温度计不可以碰烧杯底')returnif self.x1+50<self.x2<self.x1+120 and self.y1>self.y2+50>self.y1-80:messagebox.showinfo("恭喜",'读取成功')returnmessagebox.showerror("错误","温度计位置不对哦~")def key1(self,event):if self.all_check==1:returnself.all_check = 1if self.checklock1==0:self.checklock1 = 1 - self.checklock1self.control_x1 = event.xself.control_y1 = event.yboardthread1 = threading.Thread(target=self.mouse_detector1)boardthread1.start()else:self.checklock1 = 1 - self.checklock1self.boardlock1 = Falseself.all_check = 0def key2(self,event):if self.all_check==1:returnself.all_check = 1if self.checklock2==0:self.checklock2 = 1 - self.checklock2self.control_x2 = event.xself.control_y2 = event.yboardthread2 = threading.Thread(target=self.mouse_detector2)boardthread2.start()else:self.checklock2 = 1 - self.checklock2self.boardlock2 = Falseself.all_check = 0def mouse_detector1(self):if self.all_check2==1:returnself.all_check2 = 1global MOUSE_POSself.x1_real = MOUSE_POS[0]  -60 - self.master.winfo_x()self.y1_real = MOUSE_POS[1] -80 - self.master.winfo_y()record=[self.x1_real, self.y1_real]while self.boardlock1:if MOUSE_POS[0]-60-self.master.winfo_x()-self.x1 < 2 or MOUSE_POS[0]-60-self.master.winfo_x()-self.x1 > 202:self.checklock1 = 1 - self.checklock1self.all_check = 0breakif MOUSE_POS[1] -80 - self.master.winfo_y() - self.y1 < 2 or MOUSE_POS[1] -80 - self.master.winfo_y() - self.y1 > 229:self.checklock1 = 1 - self.checklock1self.all_check = 0breakself.x1_real=MOUSE_POS[0]-60-self.master.winfo_x()self.y1_real = MOUSE_POS[1] -80 - self.master.winfo_y()if record!=[self.x1_real, self.y1_real]:self.x1=self.x1_real-self.control_x1self.y1 = self.y1_real - self.control_y1self.window.axis_canvas.destroy()self.init_canvas2()time.sleep(0.00001)record = [self.x1_real, self.y1_real]self.boardlock1 = Trueself.all_check2 = 0def mouse_detector2(self):if self.all_check2==1:returnself.all_check2 = 1global MOUSE_POSself.x2_real = MOUSE_POS[0] - 60 - self.master.winfo_x()self.y2_real = MOUSE_POS[1] - 80 - self.master.winfo_y()record = [self.x2_real, self.y2_real]while self.boardlock2:if  MOUSE_POS[0] - 60 - self.master.winfo_x() - self.x2 < 2 or  MOUSE_POS[0] - 60 - self.master.winfo_x() - self.x2 > 47:self.checklock2 = 1 - self.checklock2self.all_check = 0breakif MOUSE_POS[1] - 80 - self.master.winfo_y() - self.y2 < 2 or MOUSE_POS[1] - 80 - self.master.winfo_y() - self.y2 > 238:self.checklock2 = 1 - self.checklock2self.all_check = 0print('---')breakself.x2_real = MOUSE_POS[0] - 60 - self.master.winfo_x()self.y2_real = MOUSE_POS[1] - 80 - self.master.winfo_y()if record != [self.x2_real, self.y2_real]:self.x2 = self.x2_real - self.control_x2self.y2 = self.y2_real - self.control_y2self.window.axis_canvas.destroy()self.init_canvas1()time.sleep(0.00001)record = [self.x2_real, self.y2_real]self.boardlock2 = Trueself.all_check2 = 0if __name__ == '__main__':#主函数thread = threading.Thread(target=mouse_detector)thread.start()root = tk.Tk()root.resizable(False, False)basedesk(root)root.mainloop()os._exit(0)

如何用python制作温度计模拟器 python项目小发明 【安安教具】-【物理】-【温度计】模拟器相关推荐

  1. 教你如何用python制作黑板模拟器 python 项目小发明 【安安教具】-【工具】-【黑板】模拟器

    黑板模拟器是一个多线程控制尝试,需要做到通过tkinter实现对鼠标的控制和监督.鼠标在移动时会有一个线程来检测鼠标的位置,计算窗口的位置,计算出鼠标在窗口中的位置,结合canvas画布实现对黑板的涂 ...

  2. Python制作七夕表白实例项目-让你的情人心动起来

    文章目录 Python制作七夕表白实例项目-让你的情人心动起来 前言 一.记录一起走过的那些日子 二.创意代码表白 2.1.效果演示 2.2.制作步过程 2.2.1.清屏函数 2.2.2.重定位海龟的 ...

  3. Python制作简单的终端交互小游戏

    Python制作简单的终端交互小游戏 因为最近的集训课程中,老师让我们把python,java,nodejs都需要掌握,本人最常使用的是java,python许久没有用过,就想写一段逻辑来帮助自己复习 ...

  4. 教你如何用python制作平面直角坐标系模拟器 python项目小发明 【安安教具】-【数学】-【平面直角坐标系】模拟器

    平面直角坐标系和之前的数轴模拟器有异曲同工之妙,但是作为一个二维的软件,肯定是要难一些的... [安安教具]-[数学]-[数轴]模拟器 教你如何用python制作数轴模拟器 python 小项目创作_ ...

  5. 教你如何用python制作三角形模拟器 python项目小发明 【安安教具】-【数学】-【三角形】模拟器

    三角形的三个点互相连接组成了一个平面图形,我们如何用python制作一个可以展示各种三角形的软件呢? 我们先看看效果: 这个东西要如何使用呢?我们看一下视频: 三角形模拟器 可以看到,控制三角形的三个 ...

  6. 如何用python制作二力平衡模拟器 python项目小发明 【安安教具】-【物理】-【二力平衡】模拟器

    二力平衡指的是,一个物体在两个相反力的作用下保持静止或者匀速运动. 二力平衡模拟器则可以体现这一点: 二力平衡模拟器 用到的库有: from tkinter import * import tkint ...

  7. 利用Python制作王者荣耀出装小助手,引来了老板的注意!

    导语 T_T并不玩这些游戏... 单纯来蹭个热点... 大概是因为蹭热点需要的技术含量比较低? 就这样吧~~~ 利用Python制作命令行版的王者荣耀出装小助手. Let's Go! 开发工具 Pyt ...

  8. 使用Python制作个消灭病毒的小游戏吧(教程含源码)

    近年来,电子游戏有了很大的发展.大约十年前,(那时我还不知道自己的名字怎么拼)我最喜欢的手机游戏是"space-impact":我曾经在诺基亚的手机上玩过. 这很容易,也很有趣! ...

  9. 基于Python制作的消消乐小游戏

    导语 哈喽,好久不见.消失人口上线更新一波每月必出的 python 制作小游戏系列文章.本期我们将制作一个消消乐小游戏,让我们愉快地开始吧 开发工具 Python 版本:3.6.4 相关模块: pyg ...

最新文章

  1. html 样式的几种实现方法
  2. 揭开J2EE集群的神秘面纱(一):什么是J2EE集群
  3. 边缘计算技术发展与对策研究
  4. 思维导图 - 测试技术扩展:Postman接口测试、Sonar白盒测试、Sonic移动测试、Python操作FTP服务器
  5. Hashtable与Dictionary
  6. svn 自动同步到web站点目录post-commit.bat
  7. 互联网日报 | 小米跻身千亿美金俱乐部;企业微信活跃用户数达1.3亿;蔚来即将发布旗下首款轿车...
  8. 数据库优化常用的途径(方法)
  9. OPPO小布助手算法系统的探索、实践与思考
  10. 自定义Xshell高亮
  11. matlab解决力学问题程序,力学专业程序实践:用MATLAB解决力学问题的方法与实例...
  12. 操作系统 第九章 死锁
  13. CSS3实现毛玻璃(图片模糊)效果
  14. 基于ETest的发动机ECU硬件在环测试平台的研究与开发
  15. 保时捷上海车展阵容公布:新款Cayenne全球首秀
  16. JavaScript的相关知识与问题
  17. SAP的SYSTEM的函数列表和代码示例
  18. iOS热更新解读(三)—— JSPatch 之于 Swift
  19. Tensorflow基础4:run()函数
  20. goLang 位左移

热门文章

  1. java请求post接口方法
  2. 单细胞测序学习笔记(二)——细胞注释
  3. 十个最好的免费杀毒软件下载
  4. Excel使用公式设置条件格式
  5. 自然语言处理(1):分词
  6. 相信未来  作者:食指
  7. 【通信】基于短波通信系统仿真matlab源码含 GUI
  8. python电子病历交接班系统_交班记录-电子病历模板
  9. 部署在IIS上的程序,可以找到文件夹,能看到文件却报404
  10. Java 公交车案例