栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

如何用python制作静摩擦力模拟器 python项目小发明 【安安教具】-【物理】-【静摩擦力】模拟器

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何用python制作静摩擦力模拟器 python项目小发明 【安安教具】-【物理】-【静摩擦力】模拟器

静摩擦力的特点:

1.物体受到的外力只有大于一定的阈值物体才可以运动。

2.运动后的物体所受摩擦力不变

3.运动后的物体受到低于最大静摩擦力的外力才能停止

根据这三个特点,做出静摩擦力模拟器。

运行效果:

静摩擦力模拟器

完整源代码: 

from tkinter import *
import tkinter as tk
import threading,os,time

class basedesk():#底板
    def __init__(self, master):
        self.master = master
        self.master.title("静摩擦力模拟器")
        self.master.configure(bg='#B1FFF9')
        self.master.geometry("1000x600")
        mainwindow(self.master)
class mainwindow():#主界面
    def __init__(self, master):
        self.master = master
        self.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 = master
        self.window = tk.Frame(self.master, bg='#e5f9ff')
        self.window.place(x=0, y=0, width=1000, height=600)
        self.window.sca1 = tk.Scale(self.window, orient=HORIZONTAL,length=300, tickinterval=25, )
        self.window.sca1.place(x=150,y=450,width=700,height=90)

        self.remain=False
        self.thread=threading.Thread(target=self.detector)
        self.thread.start()
        self.init_canvas()
        self.window.angle_canvas.create_text((350, 100),text='F=0',font=("Purisa", 35))
        self.window.angle_canvas.create_text((250, 220), text='f=0', font=("Purisa", 15))
        self.window.angle_canvas.create_line((150, 150, 650, 150),width=5,arrow=tk.LAST)
        self.window.angle_canvas.create_line((0, 200, 700, 200),width=5,fill='blue')
        self.window.angle_canvas.create_line((50, 100, 250 , 100), width=5, fill='green')
        self.window.angle_canvas.create_line((50, 200, 250 , 200), width=5, fill='green')
        self.window.angle_canvas.create_line((250 , 200, 250 , 100), width=5, fill='green')
        self.window.angle_canvas.create_line((50, 200, 50, 100), width=5, fill='green')
        self.window.angle_canvas.create_line((350, 250, 150, 250),arrow=tk.LAST)
        self.window.show_label = tk.Label(self.window, text="设置推力F:", font=("Helvetic", 20, "bold"), bg='#e5f9ff')
        self.window.show_label.place(x=150, y=380)
        self.window.enter_btn=tk.Button(self.window,text="重启",bg='#ffffe5',fg='#333399',font=("Helvetic", 20, "bold"),command=self.restart).place(x=550, y=380,width=250, height=50)


    def restart(self):

        self.window.destroy()
        time.sleep(0.1)
        functionwindow(self.master)


    def detector(self):

        pos=0
        num2=0
        while True:
            try:
                num2+=1
                num=self.window.sca1.get()
                if num2==1:
                    num_record = self.window.sca1.get()
                if num==num_record:
                    continue
                if num<50:
                    self.remain=False
                if num >75 or self.remain:
                    if num2 %(51**2-(num-50)**2)!=0:
                        continue
                    pos+=1
                    self.window.angle_canvas.destroy()
                    self.init_canvas()
                    self.window.angle_canvas.create_text((350+pos, 100), text='F=' + str(num), font=("Purisa", 35))
                    self.window.angle_canvas.create_text((250+pos, 220), text='f=50', font=("Purisa", 15))
                    self.window.angle_canvas.create_line((150+pos, 150, 650+pos, 150), width=5, arrow=tk.LAST)
                    self.window.angle_canvas.create_line((0, 200, 700, 200), width=5, fill='blue')
                    self.window.angle_canvas.create_line((50+pos, 100, 250+pos, 100), width=5, fill='red')
                    self.window.angle_canvas.create_line((50+pos, 200, 250+pos, 200), width=5, fill='red')
                    self.window.angle_canvas.create_line((250+pos, 200, 250+pos, 100), width=5, fill='red')
                    self.window.angle_canvas.create_line((50+pos, 200, 50+pos, 100), width=5, fill='red')
                    self.window.angle_canvas.create_line((350+pos, 250, 150+pos, 250), arrow=tk.LAST)
                    self.remain=True
                    continue
                num_record = num
                self.window.angle_canvas.destroy()
                self.init_canvas()
                self.window.angle_canvas.create_text((350 + pos, 100), text='F=' + str(num), font=("Purisa", 35))
                self.window.angle_canvas.create_text((250 + pos, 220), text='f=' + str(num), font=("Purisa", 15))
                self.window.angle_canvas.create_line((150 + pos, 150, 650 + pos, 150), width=5, arrow=tk.LAST)
                self.window.angle_canvas.create_line((0, 200, 700, 200), width=5, fill='blue')
                self.window.angle_canvas.create_line((50 + pos, 100, 250 + pos, 100), width=5, fill='green')
                self.window.angle_canvas.create_line((50 + pos, 200, 250 + pos, 200), width=5, fill='green')
                self.window.angle_canvas.create_line((250 + pos, 200, 250 + pos, 100), width=5, fill='green')
                self.window.angle_canvas.create_line((50 + pos, 200, 50 + pos, 100), width=5, fill='green')
                self.window.angle_canvas.create_line((350 + pos, 250, 150 + pos, 250), arrow=tk.LAST)
            except:
                break


    def init_canvas(self):
        self.window.angle_canvas = tk.Canvas(self.window, bg='white')
        self.window.angle_canvas.place(x=150,y=50,width=700,height=300)




if __name__ == '__main__':#主函数
    root = tk.Tk()
    root.resizable(False, False)
    basedesk(root)
    root.mainloop()
    os._exit(0)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/878828.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号