das Malen einer kleinen Animation bereitet mir Schwierigkeiten:
1. Frage:
Ich würde gerne einer Klasse eine "Grafikressource" mit meiner Methode setCan(self, can) (siehe unten) zuweisen, in die diese Klasse mit einer Methode reinmalt. Ich vermute, dass diese Grafikressouce ein Canvas ist. [richtig?/falsch?]
2. Frage
Allerdings möchte ich das Canvas an anderer Stelle (außerhalb) gerne definieren. Die Methode show() (siehe unten) soll dann in das übergebene Canvas can reinmalen, aber jeweilig angepaßt an die Maße des Canvas. Aber wie komme ich innerhalb von show() an die Maße des Canvas heran? Ich habe es mit
Code: Alles auswählen
height = self.__can.width # funzt nicht
width = self.__can.height # funzt nicht
3. Ich möchte einen ausgefüllten Kreis blinken lassen. Also male ich einen gelb-ausgefüllten Kreis, warte 1s, dann der rot-ausgefüllte Kreis, warte 1s und zuletzt der grün-ausgefüllte. So mein Plan. Aber auch das funktioniert nicht. Es wird nur der letzte Kreis gemalt.
Wie kann ich das nacheinander einblenden? Muß ich eine Art flush()-Methode aufrufen, um die Grafik auch unmittelbar zeichnen zu lassen?
Code: Alles auswählen
self.__can.create_oval(x0,y0,width,height, fill='yellow')
time.sleep(1)
self.__can.create_oval(x0,y0,width,height, fill='red')
time.sleep(1)
self.__can.create_oval(x0,y0,width,height, fill='green') # nur dieser Kreis wird gemalt
Code: Alles auswählen
def setCan(self, can):
self.__can = can
def show(self, dauer):
x0 = 15
y0 = 15
height = 135 # self.__can.width funzt nicht
width = 135 # self.__can.height funzt nicht
self.__can.create_oval(x0,y0,width,height, fill='yellow')
time.sleep(1)
self.__can.create_oval(x0,y0,width,height, fill='red')
time.sleep(1)
self.__can.create_oval(x0,y0,width,height, fill='green')
time.sleep(1)
CJC