|

楼主 |
发表于 2017-4-24 19:57:40
|
显示全部楼层
问题已经解决~
- from tkinter import *
- class Circleline:
- def __init__(self):
- window = Tk()
- #小球半径
- radius = 20
- #左边小球圆心坐标初始化
- self.x1 = 20
- self.y1 = 20
- #右边小球圆心坐标初始化
- self.x2 = 120
- self.y2 = 50
- self.canvas = Canvas(window,width=500,height=300)
- self.canvas.pack()
- #绘制小球
- self.canvas.create_oval(self.x1-radius,self.y1-radius,self.x1+radius,self.y1+radius,fill = 'black',tags = 'ball1')
- self.canvas.create_oval(self.x2-radius,self.y2-radius,self.x2+radius,self.y2+radius,fill = 'black',tags = 'ball2')
- #连接小球的线以及显示距离的文本绘制
- self.canvas.create_line(self.x1,self.y1,self.x2,self.y2,tags = 'line')
- self.canvas.create_text((self.x1+self.x2)/2,(self.y2+self.y1)/2,text = str(getdistance(self.x1,self.y1,self.x2,self.y2)),tags = 'text')
- #事件绑定:拖动两个小球时画面的变化
- self.canvas.bind('<B1-Motion>',self.movemouse)
- window.mainloop()
- def movemouse(self,event):
- #当鼠标在左边小球内拖动时
- if ((event.x-self.x1)**2+(event.y-self.y1)**2)**0.5<=20 and getdistance(event.x,event.y,self.x2,self.y2)>70:
- #重新绘制左边小球、连接的线、显示距离的文本
- self.canvas.delete('ball1','line','text')
- self.x1 = event.x
- self.y1 = event.y
- self.canvas.create_oval(self.x1-20,self.y1-20,self.x1+20,self.y1+20,fill = 'black',tags = 'ball1')
- self.canvas.create_line(self.x1,self.y1,self.x2,self.y2,tags = 'line')
- self.canvas.create_text((self.x1+self.x2)/2,(self.y2+self.y1)/2,text = str(getdistance(self.x1,self.y1,self.x2,self.y2)),tags = 'text')
- #当鼠标在右边小球内拖动时
- elif ((event.x-self.x2)**2+(event.y-self.y2)**2)**0.5<=20 and getdistance(event.x,event.y,self.x1,self.y1)>70:
- #重新绘制右边小球、连接的线、显示距离的文本
- self.canvas.delete('ball2','line','text')
- self.x2 = event.x
- self.y2 = event.y
- self.canvas.create_oval(self.x2-20,self.y2-20,self.x2+20,self.y2+20,fill = 'black',tags = 'ball2')
- self.canvas.create_line(self.x1,self.y1,self.x2,self.y2,tags = 'line')
- self.canvas.create_text((self.x1+self.x2)/2,(self.y2+self.y1)/2,text = str(getdistance(self.x1,self.y1,self.x2,self.y2)),tags = 'text')
-
- def getdistance(x1,y1,x2,y2):
- #两个小球距离的计算
- return round(((x1-x2)**2+(y1-y2)**2)**0.5,2)
-
- Circleline()
复制代码
 |
|