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