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()