You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CustomGourmet/src/chatweb/Untitled-1.py

120 lines
4.0 KiB

from turtle import RawTurtle
import tkinter as tk
import threading
class app:
def __init__(self) -> None:
self.mainapp=tk.Tk()
self.mainapp.geometry("600x800+500+100")
self.tk()
self.mainapp.mainloop()
def drawcpu(self,cpu):
for i in cpu:
self.runpen[i].fd(50)
def drawio(self,io):
for i in io :
self.runpen[abs(i)].fd(50)
def FCFS(self):
c=self.l
iol=[]
cpu=[]
io=[]
cpul=c
while (cpul!=[]) or (iol!=[]):
if(iol!=[] and iol[0]!=[] and iol[0][0]>0):
cpul.append(iol[0])
iol.pop(0)
continue
if(cpul!=[] and cpul[0]!=[] and cpul[0][0]<0):
iol.append(cpul[0])
cpul.pop(0)
continue
if cpul==[]:
cpu.append(0)
elif cpul[0]==[]:cpul.pop(0)
elif(cpul[0][0]>0):
cpu.append(cpul[0][0])
cpul[0].pop(0)
if(iol==[]):
io.append(0)
elif(iol[0]==[]):iol.pop(0)
elif(iol[0][0]<0):
io.append(iol[0][0])
iol[0].pop(0)
print("io:",io)
print("cpu:",cpu)
print("iol:",iol)
print("cpul:",cpul)
threading.Thread(target=lambda:self.drawcpu(cpu)).start()
threading.Thread(target=lambda:self.drawio(io)).start()
def creat(self,p):
self.num+=1
p=[int(x) for x in p]
self.timesum+=sum(p)
self.l.append([self.num]*p[0]+[-self.num]*p[1]+[self.num]*p[2])
self.createntry.delete(0,"end")
self.b1=tk.Button()
self.creatpen.color("black")
self.creatpen.pensize(1)
self.creatpen.pu()
self.creatpen.goto(self.creatposition)
self.creatpen.pd()
self.creatpen.write("进程{}".format(self.num),font=(None,15))
self.creatpen.fd(70)
self.creatpen.left(90)
self.creatpen.fd(9)
self.creatpen.right(90)
self.creatpen.color("red")
self.creatpen.pensize(20)
for i in p:
self.creatpen.fd(i*50)
self.creatpen.color("red" if self.creatpen.color()!=('red', 'red') else "green")
self.runpen.append(RawTurtle(self.draw))
self.runpen[self.num].hideturtle()
self.runpen[self.num].speed(0)
self.runpen[self.num].color("blue")
self.runpen[self.num].pensize(20)
self.runpen[self.num].pu()
self.runpen[self.num].goto(self.creatposition[0]+70,self.creatposition[1]+9)
self.runpen[self.num].pd()
self.runpen[self.num].speed(1)
self.creatposition[1]-=30
def creatset(self):
self.runpen=[]
self.creatpen.clear()
self.l=[]
self.timesum=0
self.num=0
self.creatposition=[-270,200]
self.runpen.append(RawTurtle(self.draw))
self.runpen[0].hideturtle()
self.runpen[0].speed(0)
self.runpen[0].color("blue")
self.runpen[0].pensize(20)
self.runpen[0].pu()
self.runpen[0].goto(-270,300)
self.runpen[0].speed(1)
def tk(self):
self.draw=tk.Canvas(self.mainapp,width=600,height=600)
self.draw.pack()
self.ui=tk.Frame(self.mainapp,width=600,height=200)
self.ui.pack()
self.createntry=tk.Entry(self.ui,width=60)
self.createntry.place(x=10,y=10)
self.creatpen=RawTurtle(self.draw)
self.creatpen.pen(speed=0,shown=False)
self.creatset()
self.creatbutton=tk.Button(self.ui,width=20,text="creat",command=lambda:self.creat(self.createntry.get().split(",")))
self.creatbutton.place(x=440,y=8)
self.clearbuttom=tk.Button(self.ui,width=20,text="clear",command=self.creatset)
self.clearbuttom.place(x=440,y=40)
self.FCFSbuttom=tk.Button(self.ui,width=20,text="FCFS",command=self.FCFS)
self.FCFSbuttom.place(x=440,y=80)
pass
app()