Ich würde vorschlagen, die tkinter Bibliothek auschecken. Wir machen all unsere simplen Visualisierungen damit.
Hier ist ein sehr einfaches Beispiel für die Art von Animation, die erreicht werden kann, die dramatischen Aufnahmen pardon: https://www.youtube.com/watch?v=xnZQ0f--Ink
Hier ist der Quellcode der beschreibt, in etwa, was Sie oben sehen: https://github.com/harrymunro/Simulations/blob/master/termini_simulation_animation.py
Hier eine Kopie Paste der Animation Komponente:
################ SET UP ANIMATION CANVAS #################
class Train:
def __init__(self, canvas, x1, y1, x2, y2, tag):
self.x1 = x1
self.y1 = y1
self.x2 = x2
self.y2 = y2
self.canvas = canvas
self.train = canvas.create_rectangle(self.x1, self.y1, self.x2, self.y2, fill="red", tags = tag)
self.train_number = canvas.create_text(((self.x2 - self.x1)/2 + self.x1), ((self.y2 - self.y1)/2 + self.y1), text = tag)
self.canvas.update()
def move_train(self, deltax, deltay):
self.canvas.move(self.train, deltax, deltay)
self.canvas.move(self.train_number, deltax, deltay)
self.canvas.update()
def remove_train(self):
self.canvas.delete(self.train)
self.canvas.delete(self.train_number)
self.canvas.update()
class Clock:
def __init__(self, canvas, x1, y1, x2, y2, tag):
self.x1 = x1
self.y1 = y1
self.x2 = x2
self.y2 = y2
self.canvas = canvas
self.train = canvas.create_rectangle(self.x1, self.y1, self.x2, self.y2, fill="#fff")
self.time = canvas.create_text(((self.x2 - self.x1)/2 + self.x1), ((self.y2 - self.y1)/2 + self.y1), text = "Time = "+str(tag)+"s")
self.canvas.update()
def tick(self, tag):
self.canvas.delete(self.time)
self.time = canvas.create_text(((self.x2 - self.x1)/2 + self.x1), ((self.y2 - self.y1)/2 + self.y1), text = "Time = "+str(tag)+"s")
self.canvas.update()
if show_animation == True:
animation = Tk()
#bitmap = BitmapImage(file="uxbridge.bmp")
im = PhotoImage(file="uxbridge_resized.gif")
canvas = Canvas(animation, width = 800, height = 400)
canvas.create_image(0,0, anchor=NW, image=im)
animation.title("Uxbridge Termini Simulation")
canvas.pack()
#### matplotlib plots
if show_animation == True and hide_plots == False:
f = plt.Figure(figsize=(5,4), dpi=100)
a1 = f.add_subplot(221) # mean headway
a2 = f.add_subplot(222) # TPH meter
a3 = f.add_subplot(223) # headway distribution
a4 = f.add_subplot(224) # train count
a1.plot()
a2.plot()
a3.plot()
a4.plot()
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
dataPlot = FigureCanvasTkAgg(f, master=animation)
dataPlot.show()
dataPlot.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
f.tight_layout()
canvas.pack()
# platforms
if show_animation == True:
canvas.create_rectangle(50, 100, 200, 150, fill = "yellow")
canvas.create_rectangle(50, 200, 200, 250, fill = "yellow")
canvas.create_line(50, 75, 200, 75, fill="green", width=3) # platform 4
canvas.create_line(50, 175, 200, 175, fill="green", width=3) # platform 2/3
canvas.create_line(50, 275, 200, 275, fill="green", width=3) # platform 1
canvas.create_text(125, 110, text = "Platform 4")
canvas.create_text(125, 140, text = "Platform 3")
canvas.create_text(125, 210, text = "Platform 2")
canvas.create_text(125, 240, text = "Platform 1")
# track
canvas.create_line(200, 75, 650, 75, fill="green", width=3) # platform 4 run out
canvas.create_line(200, 175, 650, 175, fill="green", width=3) # platform 2/3 run in
canvas.create_line(300, 175, 400, 75, fill="green", width=3)
canvas.create_line(450, 75, 600, 175, fill="green", width=3)
canvas.create_line(450, 175, 600, 75, fill="green", width=3)
canvas.create_line(200, 275, 300, 275, fill="green", width=3)
canvas.create_line(300, 275, 400, 175, fill="green", width=3)
############ END OF CANVAS #################
Bitte beachten Sie, dass die Abfrage von Empfehlungen für Bibliotheken oder Tools ausdrücklich als Kriterium für die Beantwortung Ihrer Frage angegeben wird. Allerdings bieten kommerzielle DES-Produkte wie Simio, Arena oder ExtendSim Animations-/Visualisierungsfunktionen. Die schlechte Nachricht ist, dass sie teuer sind. Ein möglicher Lichtblick ist, dass einige von ihnen für akademische Zwecke leicht verfügbar sind. – pjs
Danke für die Klarstellung. Ich bin mir nicht sicher, wie und wo ich Hilfe für meine Frage bekomme, wenn nicht auf SO. Wo würdest du fragen oder wie müsste ich meine Frage umformulieren? – mondano