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