Ich hatte mich da auch mal dran ausgetobt.
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf8
from __future__ import absolute_import, division, print_function
import Tkinter as tk
from math import cos, pi as PI, sin
CANVAS_WIDTH = 1290
CANVAS_HEIGHT = 780
def zeichne_kreis(canvas, x, y, radius):
return canvas.create_oval(
x - radius, y - radius, x + radius, y + radius, fill='yellow'
)
def zeichne_zeiger(canvas, x_1, y_1, x_2, y_2):
return canvas.create_line(x_1, y_1, x_2, y_2, fill='red')
def loesche_zeiger(canvas, zeiger_id):
canvas.delete(zeiger_id)
def zeichne_uhreinteilung(canvas, x, y, radius, laenge=20):
canvas.create_line(
x, y - radius + laenge, x, y - radius - laenge, fill='blue'
)
canvas.create_line(
x + radius - laenge, y, x + radius + laenge, y, fill='blue'
)
canvas.create_line(
x, y + radius - laenge, x, y + radius + laenge, fill='blue'
)
canvas.create_line(
x - radius - laenge, y, x - radius + laenge, y, fill='blue'
)
def zeichne_uhreinteilung_fein(canvas, x, y, radius, laenge=10):
for winkel in xrange(0, 360, 30):
canvas.create_line(
x + (radius + laenge) * cos(PI / 180 * winkel),
y + (radius + laenge) * sin(PI / 180 * winkel),
x + (radius - laenge) * cos(PI / 180 * winkel),
y + (radius - laenge) * sin(PI / 180 * winkel),
fill='blue'
)
def aktualisiere_zeiger(canvas, center_x, center_y, winkel, zeiger_id=None):
if zeiger_id:
loesche_zeiger(canvas, zeiger_id)
if winkel < 360:
zeigerlaenge = 250
canvas.after(
1000,
aktualisiere_zeiger,
canvas,
center_x,
center_y,
winkel + 10,
zeichne_zeiger(
canvas,
center_x,
center_y,
center_x + zeigerlaenge * cos(PI / 180 * winkel),
center_y + zeigerlaenge * sin(PI / 180 * winkel)
)
)
def main():
root = tk.Tk()
canvas = tk.Canvas(root, width=CANVAS_WIDTH, height=CANVAS_HEIGHT)
canvas.pack()
center_x = CANVAS_WIDTH / 2
center_y = CANVAS_HEIGHT / 2
radius = 300
zeichne_kreis(canvas, center_x, center_y, radius)
zeichne_uhreinteilung(canvas, center_x, center_y, radius)
zeichne_uhreinteilung_fein(canvas, center_x, center_y, radius)
aktualisiere_zeiger(canvas, center_x, center_y, 0)
root.mainloop()
if __name__ == '__main__':
main()