Beispiel_zu_Threads.py
Beispiel_zu_Threads.py.py — Python Source, 2 KB (2923 bytes)
Dateiinhalt
from visual import * from threading import Thread from time import sleep ZEIT = 5 class RotationsKugel(Thread): # Eine Kugel wird um einen Pfeil rotiert, nach einer gewissen Zeit # aendert sich die Richtung def __init__(self): # Konstruktor Thread.__init__(self) # Konstruktor Oberklasse self.kugel = sphere(pos=(3,0,0), material=materials.earth) # die Kugel self.pointer = arrow(pos=(0,-5,0), axis=(0,10,0), shaftwidth=0.1) # der Pfeil self.anzeige_zeit = label(box = False, color = color.white, pos = (0, 5.3, 0), text = "Zeit: " + str(ZEIT)) # Anzeige Zeit self.winkelrichtung = 1 # die Drehrichtung def run(self): # wird nach start() ausgefuehrt while True: rate(20) self.kugel.rotate(angle=radians(3*self.winkelrichtung),origin=(0,0,0), axis=(0,1,0)) # die Rotation class Zeit(Thread): # Zeitdauer der Rotation in eine Richtung def __init__(self,kugel): # Konstruktor Thread.__init__(self) # Konstruktor der Oberklasse self.zeit = ZEIT # Attribut der verwendeten Sekunden self.view = kugel # Referenzattribut zur Klasse RotationKugel def run(self): # wird nach start() ausgefuehrt while True: self.view.sekunden = self.zeit # setze Zeit while self.view.sekunden >= 0: # verbleibt noch Zeit? self.view.anzeige_zeit.text = "Zeit: " + str(self.view.sekunden) # Anzeige Zeit als Text sleep(1) # warte 1 Sekunden self.view.sekunden = self.view.sekunden - 1 # Zeitdauer um 1 Sekunde verringern self.view.winkelrichtung *= -1 # Drehrichtung aendert sich self.view.sekunden = self.zeit # Zeit wieder auf Startwert zurueckgesetzt if __name__ == "__main__": # wurde Python-Programm gestartet? dann fuehre aus... drehkugel = RotationsKugel() # erzeuge Kugel scene.autoscale=False # keine automatische Skalierung z = Zeit(drehkugel) # Objekt der Klasse Zeit mit Referenzattribut zur Klasse RotationsKugel drehkugel.start() # starte Methode run der Klasse RotationsKugel z.start() # starte Methode run der Klasse Zeit