2017-03-26 28 views
1

我正在做一个小外星人项目来帮助学习tkinter中的图形,我遇到了一个问题。我试图让外星人的眼球保持在眼睛内部,但仍然会移动,但这需要我检测眼球的边缘,这是一个圆圈。不太确定tkinter中的坐标怎么样(除了基础),所以任何帮助表示赞赏。谢谢!Tkinker围绕圆圈坐标处​​理蟒蛇3

from tkinter import * 
from threading import Timer 
import random 
import time 
global canvas, root 

root = Tk() 
root.title("Alien") 
root.attributes("-topmost", 1) 

canvas = Canvas(root, height=300, width =400) 
canvas.pack() 
Blinking = False 

class Alien: 
    def __init__(self): 
     global canvas, root 
     self.body = canvas.create_oval(100,150,300,250, fill = "green") 
     self.eye = canvas.create_oval(170,70,230,130, fill = "white") 
     self.eyeball = canvas.create_oval(190,90,210,110, fill = "black") 
     self.mouth = canvas.create_oval(150,220,250,240, fill = "red") 
     self.neck = canvas.create_line(200,150,200,130) 
     self.hat = canvas.create_polygon(180,75,220,75,200,20, fill = "blue") 
     self.words = canvas.create_text(200,800, text = "I'm an alien!", anchor="nw") 
     root.update() 

    def openMouth(self): 
     global canvas, root 
     canvas.itemconfig(self.mouth, fill = "black") 
     root.update() 
    def closeMouth(self): 
     global canvas, root 
     canvas.itemconfig(self.mouth, fill = "red") 
     root.update() 

    def burp(self, event): 
     self.openMouth() 
     canvas.itemconfig(self.words, text = "BURRRRP!") 
     time.sleep(0.5) 
     self.closeMouth() 
    def moveEye(self,event): 
     global root, canvas 
     canvas.move(alien.eyeball , random.randint(-1,1) , random.randint(-1,1)) 
     root.update() 

    def blink(self,event): 
     canvas.itemconfig(self.eye, fill = "green") 
     canvas.itemconfig(self.eyeball, state=HIDDEN) 
     Blinking = True 
     root.update() 
    def unblink(self,event): 
     canvas.itemconfig(self.eye, fill = "white") 
     canvas.itemconfig(self.eyeball, state=NORMAL) 
     Blinking = False 
     root.update() 



alien = Alien() 
alien.openMouth() 
time.sleep(1) 
alien.closeMouth() 
canvas.bind_all("<Button-1>", alien.burp) 
canvas.bind_all("<KeyPress-a>", alien.blink) 

Timer(2, alien.moveEye).start() 
while not Blinking: 
    alien.moveEye(event) 
    if alien.moveEye.event.x > 190: 
     canvas.move(alien.eyeball, -1 , 0) 
+0

你能在几何术语解释现实问题? (我从来没有见过外星人:)) – MBo

+0

一个圆圈随着另一个圆圈内的随机算法移动,我需要设置参数,因此它不能逃脱圆圈。所以也许有一个方程来检测圆周的坐标(r平方的平方根减x平方?)?谢谢 :) –

回答

0

半径为r小圆位于半径为R的大圈子里面,如果

(BigCenter.X - SmallCenter.x)^2 + (BigCenter.Y - SmallCenter.Y)^2 < (R - r)^2 

^2表示平方值