eyes.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-
#
## eyes.py: eyes-example, 2002-12-29, Walter Spiegel
## port to python 3.x: 2023-07-28
## from EYES.ml, an Ocaml-LabTk Example-Programm
## by Jun Furuse and Jacques Garrigue
## Jacques Garrigue <garrigue@kurims.kyoto-u.ac.jp>
## Jun Furuse (LablTk) <Jun.Furuse@inria.fr>
################################################
from tkinter import *
from math import sqrt
class eye:
def __init__(self,cx,cy,wx,wy,ewx,ewy,bnd):
"""creates eye"""
self.curx = cx
self.cury = cy
self._cx = cx
self._cy = cy
self._wx = wx
self._wy = wy
self._bnd = bnd
self.o2 = Canvas.create_oval(can,(cx-wx),(cy-wy),(cx+wx),(cy+wy),outline='black',width=7,fill='white')
self.o = Canvas.create_oval(can,(cx-ewx),(cy-ewy),(cx+ewx),(cy+ewy),fill='black')
def move(self,ex,ey):
"""move eye: self.o"""
self.xdiff = ex - self._cx
self.ydiff = ey - self._cy
self.dx = (self.xdiff / (self._wx * self._bnd)) ** 2.0
self.dy = (self.ydiff / (self._wy * self._bnd)) ** 2.0
self.diff = sqrt ( self.dx + self.dy )
if (self.diff > 1.0):
self.nx = int ( self.xdiff * (1.0 / self.diff)) + self._cx
self.ny = int ( self.ydiff * (1.0 / self.diff)) + self._cy
else:
self.nx = ex
self.ny = ey
Canvas.move(can,self.o,(self.nx - self.curx), (self.ny - self.cury) )
self.curx = self.nx
self.cury = self.ny
def moveEye(event):
"""Event-Handler: moves eyes"""
ex = event.x
ey = event.y
left_eye.move(ex,ey)
right_eye.move(ex,ey)
################################################
## main
root=Tk()
root.title('Eyes in Python')
fw = Frame(root)
fw.pack()
can = Canvas(fw,width=200,height=200,bg='lightgrey')
left_eye = eye(60,100,30,40,5,6,0.6)
right_eye = eye(140,100,30,40,5,6,0.6)
can.bind("<Motion>",moveEye)
can.pack()
root.mainloop()
→ Fenster schließen